我有一个简单的单元测试,我测试DAO。我模拟了依赖项并通过构造函数将其注入到主题中。 我需要拆掉吗? Mockito是否在进入设置方法的同一状态下测试退出?还请解释一下。
@Mock
private PersonDAO dao;
@Overide
public void setup(){
MockitoAnnotations.initMocks(this);
sut = new PersonResource(dao);
}
@Test
public void testUpdate(){
when(dao.findNameById(1)).thenReturn("Abhinav-before");
sut.update(1, "Abhinav-after");
}
答案 0 :(得分:2)
除非您使用其他状态驱动的资源(例如缓存或临时文件),否则在模拟时不需要删除任何资源。
模拟对象只是一个对象;它没有或维护任何外部服务。它将像您在测试中使用的任何其他对象一样收集垃圾。根据您注入模拟的方式,无论如何都会为每次测试运行重新创建。
现在您已经提供了一些代码,如果您使用了@Before
注释,那么您将确保在每个测试运行实例之前都将注入 。就目前而言,该测试可能无法编译;我无法想象你会在那个测试中扩展另一个具有setup
方法的测试。
(如果你这样做,请不要。你只会伤到自己。)
最后,在此测试中断言。你没有断言任何东西,所以它总是会通过,除非你断言你的测试对象的状态是真的。
如果您使用MockitoJUnitRunner
代替initMocks
,则不需要@RunWith(MockitoJUnitRunner.class)
public class PersonResourceTest {
@Mock
private PersonDAO dao;
@InjectMocks
private PersonResource testObject;
@Test
public void testUpdate(){
when(dao.findNameById(1)).thenReturn("Abhinav-before");
testObject.update(1, "Abhinav-after");
}
}
部分,但这仅适用于此仅 >作为JUnit的跑步者不能支持多个跑步者。
{{1}}