自动生成.NET和Java的unit testing用例

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

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

令我感到震惊的是,对于非常有数据驱动的类 – 解析器等,这种事情非常有用。我看不出我经常会开始使用它,但它仍然是你军械库中的一个有用的工具。

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

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

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

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

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

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

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