Unit testing @InjectMocks实际上并不是在注入mocks
所以我有一个类需要测试。我们把它叫做ClassToTest。它有两个Dao对象作为字段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所需的所有依赖项
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;但在首次引入该功能时存在一个限制。