12

给定一个 .NET 或 Java 项目,是否有一个好的工具来生成单元测试用例,它生成的单元测试用例将覆盖几乎 100% 的代码覆盖率。测试用例的数量可能与代码的圈复杂度成正比(循环和条件的嵌套越高圈复杂度越高),圈复杂度越高,生成的测试用例集就越多。我不希望它功能齐全(比如我将构建单元测试并在生成后运行它),但我会说它可以在您要修改的测试用例中具有模板样式适合您预期需求的案例。但它也应该有一个适当的设置和拆卸方法,并且足以检测是否应该使用模拟对象进行单元测试,如果有任何依赖关系。那么,存在这样的工具吗?

4

5 回答 5

15

对于 .NET,Microsoft 拥有Pex,它有望成为 .NET 4.0 的主流,以及Code Contracts。我强烈推荐观看第 9 频道的视频。

令我震惊的是,这种东西对于非常数据驱动的类(解析器等)非常有用。我看不出我经常会它开始,但它仍然是一个有用的工具,可以放在你的军械库中。

于 2009-03-27T09:46:43.753 回答
5

对于 C#(或一般的 .NET),PEX可能就是那个工具。它在 IL 级别工作,并试图强行进入每个分支。它成功地发现了广泛的错误(在 BCL 等中)。

于 2009-03-27T09:46:55.127 回答
5

尽管这似乎违反直觉,但您可能也对随机测试生成框架感兴趣。研究证明,正如您所建议的,它在发现错误方面与基于覆盖的系统方法一样有效。

查看.NET 和 Java 的Randoop 。它通过生成或多或少随机的方法调用序列来工作,并检查合同、崩溃等。它是全自动的。

此外,您可能还想查看其他一些基于QuickCheck的随机测试工具,例如 Java、Scala、F#。更类似于 Pex,即您给出一个规范或参数化单元测试,该工具会检查它是否有许多生成的输入参数。

我发现这种编写单元测试的“参数化”方式实际上在至少 60% 的情况下更加自然,并且发现了更多的错误。

于 2009-03-27T09:58:35.147 回答
1

对于 Java,您可以查看EvoSuite,它是开源的并且目前处于活动状态(免责声明,我是它的贡献者之一)。另请参阅相关问题以获取更多工具列表。

于 2016-03-03T20:45:32.187 回答
0

对于 Java,请尝试JUnit-Tools。它有自己的 eclipse 插件以及良好的文档。

于 2016-05-31T17:48:02.510 回答