你如何用 delete 方法 void 断言
How do you assert with delete method void
我正在使用 Mockito 对 Spring 引导网络应用程序进行单元测试。我的方法之一是返回 void
,但如果我尝试对其进行测试,则会出现编译错误。
这是我写的测试:
public void testDeleteActor()throws NetflixException {
when(actorRepository.findById(1L)).thenReturn(Optional.of(Mockito.any(Actor.class)));
assertEquals(null, service.deleteActorById(Mockito.anyLong());
}
这是我要测试的方法:
@Override
public void deleteActorById(Long id) throws NetflixException {
Actor actor = actorRepository
.findById(id)
.orElseThrow(() -> new NotFoundException("Actor id not found - " + id));
actorRepository.delete(actor);
}
如您在以下屏幕截图中所见,我的 assertEquals()
语句出现错误:
在您的代码中,您的方法实际上并没有返回 null
,它没有返回任何内容 (void
)。这意味着您不能根据方法 returns 编写断言。这就是 assertEquals()
语句给您错误的原因。
您可以测试方法的预期行为,而不是测试方法 returns。在这个例子中,我们期待三件事:
- 该方法应通过 ID 检索演员。
- 如果没有找到具有给定 ID 的演员,该方法应该抛出异常。
- 如果找到演员,该方法应该将其删除。
要实施这些测试,您可以使用 Mockito's verify()
and AssertJ's assertThatExceptionOfType()
。例如:
@Test
void deleteActorById_retrievesActorByID() {
Actor actor = new Actor();
when(actorRepository.findById(1L)).thenReturn(Optional.of(actor));
service.deleteActorById(1L);
verify(repository).findById(1L);
}
@Test
void deleteActorById_throwsExceptionIfIDNotFound() {
assertThatExceptionOfType(NotFoundException.class)
.isThrownBy(() -> service.deleteActorById(1L))
.withMessage("Actor id not found - 1");
}
@Test
void deleteActorById_deletesActorIfIDFound() {
Actor actor = new Actor();
when(actorRepository.findById(1L)).thenReturn(Optional.of(actor));
service.deleteActorById(1L);
verify(actorRepository).delete(actor);
}
我正在使用 Mockito 对 Spring 引导网络应用程序进行单元测试。我的方法之一是返回 void
,但如果我尝试对其进行测试,则会出现编译错误。
这是我写的测试:
public void testDeleteActor()throws NetflixException {
when(actorRepository.findById(1L)).thenReturn(Optional.of(Mockito.any(Actor.class)));
assertEquals(null, service.deleteActorById(Mockito.anyLong());
}
这是我要测试的方法:
@Override
public void deleteActorById(Long id) throws NetflixException {
Actor actor = actorRepository
.findById(id)
.orElseThrow(() -> new NotFoundException("Actor id not found - " + id));
actorRepository.delete(actor);
}
如您在以下屏幕截图中所见,我的 assertEquals()
语句出现错误:
在您的代码中,您的方法实际上并没有返回 null
,它没有返回任何内容 (void
)。这意味着您不能根据方法 returns 编写断言。这就是 assertEquals()
语句给您错误的原因。
您可以测试方法的预期行为,而不是测试方法 returns。在这个例子中,我们期待三件事:
- 该方法应通过 ID 检索演员。
- 如果没有找到具有给定 ID 的演员,该方法应该抛出异常。
- 如果找到演员,该方法应该将其删除。
要实施这些测试,您可以使用 Mockito's verify()
and AssertJ's assertThatExceptionOfType()
。例如:
@Test
void deleteActorById_retrievesActorByID() {
Actor actor = new Actor();
when(actorRepository.findById(1L)).thenReturn(Optional.of(actor));
service.deleteActorById(1L);
verify(repository).findById(1L);
}
@Test
void deleteActorById_throwsExceptionIfIDNotFound() {
assertThatExceptionOfType(NotFoundException.class)
.isThrownBy(() -> service.deleteActorById(1L))
.withMessage("Actor id not found - 1");
}
@Test
void deleteActorById_deletesActorIfIDFound() {
Actor actor = new Actor();
when(actorRepository.findById(1L)).thenReturn(Optional.of(actor));
service.deleteActorById(1L);
verify(actorRepository).delete(actor);
}