场景:我有一些集成测试。其中一个测试删除。所以我这样做了:
@Test
@Order(6)
public void delete() {
rfxCriteriRepository.delete(rfxCriteriEconomico.getIdrfxcriteri());
}
简单地测试该方法是否没有抛出异常。然后,为了确保删除成功,我添加了:
@Test
@Order(7)
public void getDelete() {
RfxCriteri rfxCriteriEconomicoDb = rfxCriteriRepository.findByIdrfxcriteri(
rfxCriteriEconomico.getIdrfxcriteri()
);
Assertions.assertNull(rfxCriteriEconomicoDb);
}
我的想法是,第一个测试测试代码。如果代码写得很好,它应该不会抛出异常,并且测试通过。第二个测试测试删除操作是否有效地从数据库中删除了该条目。我认为它们是两个独立的测试。
你认为每个测试都必须有一个assert
吗?或者你认为这两个测试应该是一个独特的测试?谁能给我一些关于单元测试的指南,让我了解一下?
发布于 2019-05-09 18:25:27
如果你没有断言,那么你就没有测试。测试意味着您需要能够设置一些数据,运行测试中的方法,然后测试结果,这就是断言发挥作用的地方。
以您的特定示例为例,您的代码没有抛出错误的事实并不意味着删除操作确实有效。测试的唯一方法是去数据库检查,这意味着你有一个集成测试,而不是单元测试。
编写因为代码中没有错误而成功的“测试”是毫无意义的,你实际上并不是在测试任何东西,有无数种方法可以编写不会失败但实际上没有做任何事情的代码。
测试边缘情况--传递0作为id,传递null。测试当db中不存在id时会发生什么。测试当id存在但存在关联数据时会发生什么,这可能意味着您需要首先删除其他内容。测试快乐路径场景。
如果您期望在某些场景中出现某些错误,那么也要对这些错误进行测试。
你可以写一大堆测试,确保它们可以单独运行,它们不共享状态等。
https://stackoverflow.com/questions/56056186
复制相似问题