我的应用程序是用spring boot
编写的。
我正在使用testNG
和mockito
进行单元测试。
我对单元测试的工作有点困惑。
以下是我的测试类
class StudentServiceTest {
@mock
StudentDAO studentDAO;
@InjectMocks
StudentService studentService;
@BeforeMethod
public void initMock() {
studentService = new StudentService();
MockitoAnnotations.initMocks(this);
}
@Test(dataprovider.....)
public void shouldxxxxx(int id......) {
when(studentDAO.findOne(id)).thenReturn(Student);
assert......
}
}
当我跑过上面的测试时。它工作正常。
我有疑虑。
您可以使用new运算符简单地实例化对象,甚至不涉及Spring。您还可以使用模拟对象而不是真正的依赖项
如果我没有使用new关键字实例化服务,则显示错误"无法实例化@InjectMocks "。
如果我autowired
服务,那么它需要弹簧容器,我甚至运行单一测试,运行需要太多时间。如果not autowired
并使用new
关键字,那么它的运行速度非常快。
答案 0 :(得分:1)
不,我猜是因为你在嘲笑每一件事。
不,除非你想使用spring managed beans。
我使用了新的关键字来初始化服务。
即使不需要使用new关键字实例化服务。确保您的
initMock()
方法使用org.junit.Before
注释进行注释,并使用MockitoAnnotations.initMocks(this);
初始化
如果你注意了这一点,你就不应该看到无法实例化@InjectMocks 错误
当然,如果你注意3个子弹点它将是干净的代码。
你的考试应该是休闲的。
class StudentServiceTest {
@mock
StudentDAO studentDAO;
@InjectMocks
StudentService studentService;
@org.junit.Before
public void initMock() {
MockitoAnnotations.initMocks(this);
}
@Test(dataprovider.....)
public void shouldxxxxx(int id......) {
when(studentDAO.findOne(id)).thenReturn(Student);
assert......
}
}