1

我正在为我的应用程序处理一些代码覆盖率。现在,我知道代码覆盖率是一项与您创建的测试类型和您希望为其进行代码覆盖率的语言相关联的活动。

我的问题是:有没有可能的方法来做一些通用代码覆盖?就像在中一样,我们是否可以拥有一组功能/测试用例,可以运行(以及针对被测应用程序的更具体的测试)以获得 10% 或更多代码的代码覆盖率?

更像是,如果我想为代码覆盖构建一个框架,那么制作通用框架的最佳方法是什么?是否有可能使某些功能自动化或通用化?

4

2 回答 2

1

我不确定通用覆盖工具是否是圣杯,原因如下:

  1. 覆盖不是目标,而是工具。它告诉你代码的哪些部分没有被测试完全命中。它没有说明测试有多好。
  2. 生成的测试无法猜测代码的语义。为您生成测试的框架只能从阅读您的代码中推断出意义,这本质上可能是错误的,因为单元测试的重点是查看代码是否真的像您预期的那样表现。
  3. 因为自动化框架会产生人为的覆盖,你永远无法判断一段代码是用适当的单元测试测试的,还是由框架表面测试的。我宁愿让未经测试的代码显示为未发现,所以我解决了这个问题。

您可以做的(我已经做过 ;-))是编写一个通用测试来测试 Java bean。通过反射,您可以根据 Java bean 的 Sun 规范测试 Java bean。断言 equals 和 hashcode 都实现了(或者都没有实现),看到 getter 实际上返回了你用 setter 推入的值,检查所有属性是否都有 getter 和 setter。

例如,您可以对任何实现“可比”的东西执行相同的基本技巧。

这很容易做到,易于维护,并迫使您拥有干净的豆子。至于其余的单元测试,我尝试专注于首先和彻底地测试重要部分。

覆盖范围可能会给人一种虚假的安全感。常识不能自动化。

于 2008-12-08T22:23:23.753 回答
0

这通常通过将静态代码分析(Coverity、Klockwork 或它们的免费类似物)与动态分析相结合来实现,方法是针对已检测的应用程序(分析器 + 内存检查器)运行测试。不幸的是,这很难自动化测试算法,大多数工具都是一种“记录器”,能够记录流量/密钥/信号 - 取决于域并重放它们(具有最小的更改/替换,如会话 ID/用户/等)

于 2008-12-08T21:41:19.157 回答