gpt4 book ai didi

unit-testing - 单元/集成测试可以没有断言吗?那么这个特殊案例呢?

转载 作者:行者123 更新时间:2023-11-28 21:38:00 25 4
gpt4 key购买 nike

场景:我有一些集成测试。其中之一测试删除。所以我做了:

@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);
}

我的想法是第一个测试测试代码。如果代码写得好,它应该不会抛出异常,并且测试通过。第二个测试测试删除是否有效地从数据库中删除了条目。恕我直言,它们是两个独立的测试。

你认为每个测试都必须有一个断言吗?或者你认为这两个测试应该是一个独特的测试?有人能给我指点一些关于单元测试的指南吗?

最佳答案

每个测试都需要以某种形式评估结果。但是,在某些情况下,这可能是隐含的。例如,许多测试框架将在测试执行期间发生的未捕获和意外异常视为测试失败。当您使用这样的框架并且您有一个测试,其中唯一重要的是没有引发异常,那么您可以在没有任何显式断言语句的情况下编写该测试 - 框架为您执行断言。

然而,以未引发异常为唯一成功标准的测试并不常见。但是,在某些情况下这是有意义的:以经典示例为例,通过传递长度 abc 来定义三角形三边。然后,一个极端情况是两条边之和等于第三条边,如 a == b + c。然后,您可以使用三个测试用例来测试边界:

  1. 一种情况,其中两条边的长度之和刚好超过(一个 epsilon)第三条边的长度:a + epsilon == b + c - 这将是一个有效的三角形任何情况。
  2. 其中一侧比其他两条的总和长(同样是 epsilon)的情况,例如 a - epsilon == b + c。这应该引发异常,因为这不是有效的三角形。
  3. 最后是 a == b + c 的情况。

假设在您的代码中,情况 3 中的情况将产生退化但有效的三角形。然后,拥有一个仅创建此三角形的测试用例就有意义了——确保没有抛出异常。请记住,您的测试也可以被视为您的代码的文档:这样的测试很好地记录了您的代码允许创建这样的三角形。在这种情况下,测试用例当然应该被实现和命名,以使意图变得清晰,例如“constructing_aDegenerateTriangle_shallSucceedWithoutExceptionRaised”。

现在,回到问题的第二部分,在您的特定情况下,没有断言的测试是否有意义。在这种情况下,我也只会将 JBNizet 提到的组合测试视为有用(它会删除然后检查该条目是否已真正删除)。您可以单独进行这两个测试 - 但对断言的测试将是多余的,因为测试框架的隐式断言检查无论如何都会在两个测试用例中完成。

关于unit-testing - 单元/集成测试可以没有断言吗?那么这个特殊案例呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56056186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com