所以我有一个需要测试的课程。让我们称之为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会通过使用字段注入来注入模拟。为什么这不会发生?
答案 0 :(得分:0)
想出这是我正在使用的1.8.5版本中的一个错误:https://code.google.com/p/mockito/issues/detail?id=229。
升级1.10解决了这个问题。