所以我有一个需要测试的类。我们称之为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 解决了此问题。