在Mockito嘲笑时我需要拆卸方法吗?

时间:2015-02-05 17:50:59

标签: java unit-testing mockito

我有一个简单的单元测试,我测试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");
}

1 个答案:

答案 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}}