@InjectMocks实际上并没有注入模拟

时间:2015-01-27 10:48:17

标签: unit-testing dependency-injection mockito

所以我有一个需要测试的课程。让我们称之为ClassToTest。它有几个Dao对象作为字段。

Public class ClassToTest {

    @Autowired
    MyDao dao;

    void methodToTest() {
        dao.save(something);
    }
}

正如您所看到的,ClassToTest不包含任何构造函数或setter,我使用spring来自动填充字段。

现在,我有一个基础测试类,其中包含classToTest所需的所有依赖项:

public abstract BaseTest {

    @Mock
    MyDao dao;

}

testClass扩展了这个BaseTest类:

public class TestClass extends BaseTest {

    @InjectMocks
    ClassToTest classToTest = new ClassToTest();

    @Before 
    public void setup() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void test() {
        classToTest.methodToTest();
    }
}

这会在保存发生时导致空指针异常。但是,如果我将setup方法更改为:

@Before 
public void setup() {
    MockitoAnnotations.initMocks(this);
    classToTest.dao = dao;
}

测试通过。

我的理解是,当一个类没有构造函数或setter时,InjectMocks会通过使用字段注入来注入模拟。为什么这不会发生?

1 个答案:

答案 0 :(得分:0)

想出这是我正在使用的1.8.5版本中的一个错误:https://code.google.com/p/mockito/issues/detail?id=229

升级1.10解决了这个问题。