@InjectMocks实际上并不是在注入模拟



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

Public class ClassToTest {
    @Autowired
    MyDao dao;
    void methodToTest() {
        dao.save(something);
    }
}

如您所见,ClassToTest 不包含任何构造函数或设置器,我正在使用 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时,InjectMocks将使用字段注入来注入模拟。为什么这里没有发生?

发现

这是我使用的1.8.5版本中的错误:https://code.google.com/p/mockito/issues/detail?id=229。

升级 1.10 解决了此问题。

最新更新