gpt4 book ai didi

unit-testing - 是否可以编写涵盖所有内容的单元测试?

转载 作者:行者123 更新时间:2023-12-04 05:08:53 26 4
gpt4 key购买 nike

假设我有一个函数

function (int x) {
if (x < 10) return true;
return false;
}

理想情况下,您想编写 2^32 - 1 个测试用例来覆盖从 INT_MIN 到 INT_MAX 的范围?当然这是不切实际的。

为了让生活更轻松,我们为

编写测试用例
  • x < 10,测试 x = 9 期望为真
  • x == 10,测试 x = 10 预期为假
  • x > 10,测试 x = 11 预期为假

这些测试用例很好,但并未涵盖所有用例。假设有一天有人将函数修改为

function (int x) {
if (x == 12) return true;
if (x < 10) return true;
return false;
}

他将运行测试并意识到所有测试都已通过。我们如何确保在不走极端的情况下涵盖所有场景。我描述的这个问题有关键词吗?

最佳答案

由于您表述问题的方式,这部分是评论,部分是答案。

评论

Is it possible to write a unit test that cover everything?

不。即使在您的示例中,您将测试用例限制为 2^32 但是如果将代码移至 64 位系统然后有人添加一行使用 2^34 或其他东西。

此外,您的问题向我表明您正在考虑使用动态代码的静态测试用例,例如代码是动态的,因为它会随着时间的推移被程序员更改,这并不意味着代码会动态修改。您应该考虑使用动态代码的动态测试用例。

最后你没有注明是白盒测试、灰盒测试还是黑盒测试。

答案

让工具分析代码并生成测试数据。

参见:A Survey on Automatic Test Data Generation

您还询问了用于搜索的关键字。

这是我发现有值(value)的 Google 搜索:

code analysis automated test generation survey

相关

我自己从未使用过这些测试用例工具之一,因为我使用 Prolog DCG生成我的测试用例,目前我正在做的一个项目在大约两分钟内生成数百万个测试用例,并在几分钟内测试它们。一些失败的测试用例我永远不会自己想出来,所以这可能被一些人认为是矫枉过正,但它确实有效。

由于许多人不知道 Prolog DCG,这里是 Eric Lippert,Every Binary Tree There Is 使用 C# 和 LINQ 解释的类似方式。

关于unit-testing - 是否可以编写涵盖所有内容的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45136085/

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