自动生成.NET和Java的单元测试用例

时间:2009-03-27 09:42:23

标签: c# java .net unit-testing cyclomatic-complexity

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

5 个答案:

答案 0 :(得分:15)

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

让我感到震惊的是,对于数据驱动的类 - 解析器等,这类事情非常好。我看不出我经常开始,但是很有用尽管如此,仍然可以使用你的军械库。

答案 1 :(得分:5)

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

答案 2 :(得分:5)

虽然看起来反直觉,但您可能也对随机测试生成框架感兴趣。研究已经证明,正如您所建议的那样,它可以在发现错误方面与基于覆盖范围的系统方法一样有效。

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

另外,您可能需要查看基于QuickCheck的其他一些随机测试工具,例如for Java,Scala,F#。与Pex更相似,即您提供规范或参数化单元测试,该工具会检查它是否有多个生成的输入参数。

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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