Unit testing @InjectMocks实际上并不是在注入mocks

Unit testing @InjectMocks实际上并不是在注入mocks,unit-testing,dependency-injection,mockito,Unit Testing,Dependency Injection,Mockito,所以我有一个类需要测试。我们把它叫做ClassToTest。它有两个Dao对象作为字段 Public class ClassToTest { @Autowired MyDao dao; void methodToTest() { dao.save(something); } } 正如您所看到的,ClassToTest不包含任何构造函数或setter,我正在使用spring自动关联字段 现在,我有了一个具有classToTest所需的所有依赖项

所以我有一个类需要测试。我们把它叫做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();
    }
}
这将导致保存时出现空指针异常。但是,如果我将设置方法更改为:

@Before 
public void setup() {
    MockitoAnnotations.initMocks(this);
    classToTest.dao = dao;
}
考试通过了


我的理解是,当类没有构造函数或setter时,injectmock将使用字段注入来注入mock。为什么这里没有发生这种情况?

发现这是我使用的1.8.5版本中的一个错误:


升级1.10解决了这个问题。

在修复编译错误后,我完全复制了您的测试用例,它工作正常。所以问题在于你没有展示的东西。提供一个完整的、可编译的、可运行的测试用例,包含所需的所有类。它太大、太复杂,无法在这里发布。这就是我简化它的原因。你使用了什么版本的mockito?不是bug;但在首次引入该功能时存在一个限制。