为什么 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