@RunWith(MockitoJUnitRunner.class) 不初始化模拟

Viv*_*vin 4 java junit unit-testing mockito

我正在使用 Junit 4.8.2。当我@RunWith(MockitoJUnitRunner.class)使用 @Mock运行我的测试类并仅使用 @Mock 注释模拟时,它似乎没有初始化模拟。但是当我使用静态 mock() 并去掉 runner 和 annotations 时,我可以看到 mocks 已初始化。

@RunWith(MockitoJUnitRunner.class)
public class MyTestClass
{
    private static final String DOMAIN = "mock";

    @Mock private TransactionManager transactionManager;
    @Mock private SearchManager searchManager;

    private final filter = new Filter(transactionManager,searchManager, DOMAIN);

    @Test
    public void myTest()
    {
        filter.callMethod();      // This throws NPE since transactionManager was null
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?我已经研究了这个Initialising mock objects - MockIto并根据它做了一切,但仍然没有运气。

小智 5

runner在类被实例化处理@Mock注解,所以移动一个注解的方法:filter = new Filter(transactionManager,searchManager, DOMAIN);@Before

@RunWith(MockitoJUnitRunner.class)
public class MyTestClass
{
    private static final String DOMAIN = "mock";

    @Mock 
    private TransactionManager transactionManager;

    @Mock 
    private SearchManager searchManager;

    private Filter filter;

    @Before
    public void setup() throws Exception {
        filter = new Filter(transactionManager, searchManager, DOMAIN);
    }

    @Test
    public void myTest() throws Exception {
        filter.callMethod(); // No more NPE
    }
}
Run Code Online (Sandbox Code Playgroud)

跑步者文档

初始化带有 注释的模拟@Mock,因此MockitoAnnotations.initMocks(Object)不需要显式使用。在每个测试方法之前初始化模拟。