我想用验证实现delete方法并测试它:
@Override
public boolean delete(Long id) {
final Entity byId = repository.findById(id);
if (byId != null) {
repository.delete(byId);
}
final Entity removed = repository.findById(id);
if (removed != null) {
return false;
}
return true;
}
@Test
public void deleteTest() throws Exception {
// given
final Entity entity = new Entity(1L);
Mockito.when(repository.findById(1L))
.thenReturn(entity);
// when
final boolean result = service.delete(1L);
// then
Mockito.verify(repository, times(1))
.delete(entity);
assertThat(result, equalTo(true));
}
但是现在Mockito在服务中嘲笑对象“已删除”,方法返回false。我该怎么测试呢?
答案 0 :(得分:3)
正如我从您的代码中看到的那样,您正在调用方法repository.findById
两次。但是你并没有在测试中嘲笑这种行为。
您需要使用thenReturn
两次,第一次使用entity
,然后使用null
Mockito.when(repository.findById(1L)).thenReturn(entity).thenReturn(null)
使用现有代码,当您执行final Entity removed = repository.findById(id);
时,remove
将获得分配entity
而非空。