有一个很好的工具来生成单元测试用例,例如.NET或Java项目,它会生成单元测试用例,覆盖几乎100%的代码覆盖率.测试用例的数量可以与代码的圈复杂度成正比(循环嵌套和条件越高,圈复杂度越高),其中圈复杂度越高,生成的测试用例集越大.我并不期望它能够完全正常运行(比如说我要构建单元测试并在生成之后运行它),但是我会说它可以在测试用例中有一个模板样式来修改适合您的预期需求的情况.但它也应该有一个适当的设置和拆卸方法,并且足以检测是否应该使用单元测试的模拟对象,如果存在任何依赖性.那么,是否存在这样的工具?
对于.NET,微软有Pex,它有望成为.NET 4.0的主流,以及Code Contracts.我强烈建议您观看第9频道的视频.
令我感到震惊的是,这种事情非常适合于非常适合数据驱动的类 - 解析器等.我看不出我经常会开始使用它,但它仍然是你军械库中的一个有用的工具.
对于C#(或一般的.NET),PEX可能就是那个工具.它在IL级别工作,并试图强行进入每个分支.它已成功发现了大量的错误(在BCL等).
虽然它似乎是反直觉的,但您可能也对随机测试生成框架感兴趣.研究已经证明,正如您所建议的那样,它可以在发现错误方面与基于覆盖范围的系统方法一样有效.
查看Randoop的.NET和Java.它的工作原理是生成一个或多或少随机的方法调用序列,并检查合同,崩溃等.它是完全自动的.
您也可以查看基于QuickCheck的其他一些随机测试工具,例如Java,Scala,F#.与Pex更相似,即您提供规范或参数化单元测试,工具会检查它是否有多个生成的输入参数.
我发现这种"参数化"编写单元测试的方式在至少60%的情况下实际上更加自然,并且发现了更多的错误.