【发布时间】:2022-01-23 18:05:06
【问题描述】:
我正在尝试测试通过 id 删除实体的方法。我已经为具有给定 id 的实体不存在的情况编写了测试,但如果实体存在,我显然做错了什么。这是服务中的删除方法。我正在使用JpaRepository 的deleteById() 方法。
public void deleteById(Integer id) {
Optional<Agency> optionalAgency = repo.findAll().stream()
.filter(agency -> agency.getId().equals(id))
.findFirst();
if (optionalAgency.isPresent()) {
repo.deleteById(optionalAgency.get().getId());
} else {
throw new AgencyNotFoundException("Agency not found");
}
}
这是我的测试:
@Mock
private AgencyRepository agencyRepository;
@Mock
private AgencyMapper mapper;
@InjectMocks
private AgencyService agencyService;
@Test
void delete() {
Agency agency = new Agency();
when(agencyRepository.findById(1)).thenReturn(Optional.of(agency));
agencyService.deleteById(1);
verify(agencyRepository).deleteById(1);
}
我应该做出什么断言来验证删除是否成功?我尝试过的方式不起作用,测试的结果是抛出异常。我猜测抛出异常是因为agencyRepository.findById((int) 1L); 基本上不存在了,但我想也许有更好的方法来验证删除,而无需搜索已删除的对象。
【问题讨论】:
-
你为什么要做一个浮点数,只是为了把它解析成一个int?只需删除 (int) 和 L。无论哪种方式,您都比我们更了解您的 AgencyRepository 的代码,因此您应该检查该方法是否存在
-
我的 AgencyRepository 中唯一的代码是
@Repository public interface AgencyRepository extends JpaRepository<Agency, Integer> {},我必须将参数传递给 delete 方法。我试过直接传递一个 int(例如 1),但测试失败并出现同样的错误
标签: java unit-testing junit spring-data-jpa mockito