为什么 Cucumber stepdef 文件中的 mockito 模拟对象为 Null?
Why does mockito mocked object in Cucumber stepdef file come as Null?
我正在将 mockito 与 cucumber 一起使用。
我在 step def 中有一个代码,如下所示:
@Mock
private SystemsConfig systemsConfig;
@And("The login to mySytem is executed successfully")
public void loginToMySystem() {
Mockito.when(systemsConfig.getUrl()).thenReturn(MyUnitMocks.baseUrl);
}
调试时,我发现 systemsConfig 显示为 null,尽管我已经模拟了它。使用 junit 也同样有效。为什么这样 ?我怎样才能用 mockito 和黄瓜实现这个?
这是行不通的,因为没有魔法这回事。必须有某种东西将 Mockito 连接到 JUnit,以便它知道何时创建模拟。
当您使用 JUnit 时,您也在使用 Mockito JUnit 扩展、Mockito JUnit 运行程序、类似 Spring 的框架或其他可以有效调用的东西:
MockitoAnnotations.initMocks(this);
Cucumber 没有这样的扩展。因此,在使用 Cucumber 时,您必须在 before 钩子中执行此操作。
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
您可以在 Java 文档中找到 @Mock
的更多更新说明。
https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mock.html
我正在将 mockito 与 cucumber 一起使用。 我在 step def 中有一个代码,如下所示:
@Mock
private SystemsConfig systemsConfig;
@And("The login to mySytem is executed successfully")
public void loginToMySystem() {
Mockito.when(systemsConfig.getUrl()).thenReturn(MyUnitMocks.baseUrl);
}
调试时,我发现 systemsConfig 显示为 null,尽管我已经模拟了它。使用 junit 也同样有效。为什么这样 ?我怎样才能用 mockito 和黄瓜实现这个?
这是行不通的,因为没有魔法这回事。必须有某种东西将 Mockito 连接到 JUnit,以便它知道何时创建模拟。
当您使用 JUnit 时,您也在使用 Mockito JUnit 扩展、Mockito JUnit 运行程序、类似 Spring 的框架或其他可以有效调用的东西:
MockitoAnnotations.initMocks(this);
Cucumber 没有这样的扩展。因此,在使用 Cucumber 时,您必须在 before 钩子中执行此操作。
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
您可以在 Java 文档中找到 @Mock
的更多更新说明。
https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mock.html