我想通过验证实现删除方法并对其进行测试:
@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。如何测试?
正如我从您的代码中看到的那样,您repository.findById
调用该方法两次。但是你不是在测试中嘲笑这种行为。您需要使用两次thenReturn
,第一次使用entity
,然后使用null
Mockito.when(repository.findById(1L)).thenReturn(entity).thenReturn(null)
对于您现有的代码,当您执行 final Entity removed = repository.findById(id);
时,remove
将获得带有 entity
而不是 null 的赋值。