是否有人为.Net尝试过任何单元测试生成器?
我认为虽然它不会替代任何编写该功能的人所编写的良好单元测试,但我认为它会带走一些工作并成为我们可以更好地完成单元的起点试验。
感谢。
答案 0 :(得分:22)
单元测试生成是执行单元测试的错误方法。进行单元测试的正确方法是在编写功能代码之前创建测试用例,然后开发代码直到测试验证,这称为TDD(测试驱动开发)。
单元测试生成错误的一个关键原因是,如果现有代码中存在任何错误,将针对这些错误生成测试,因此如果您将来修复它们,则错误测试将失败当它实际被修复时,你会假设某些东西被破坏了。
但是既然编写了代码,它现在就处于桥下了。并且可能的错误单元测试总比没有单元测试好。我一直更喜欢NUnit,并且有一个NUnit兼容的测试生成器here(非常实惠)。
答案 1 :(得分:11)
您考虑过Pex了吗?它来自微软研究院。
Pex自动产生一个小的 具有高代码覆盖率的测试套件 一个.NET程序。为此,Pex 执行系统的程序分析 (使用动态符号执行, 类似于路径限制 模型检查)确定测试 参数化单元测试的输入。 Pex通过学习程序行为 监视执行跟踪。 Pex使用 一个约束求解器来产生新的 测试运动不同的输入 程序行为。
答案 2 :(得分:5)
多年前,我修改了Haskell的QuickCheck以允许purely functional Test Driven Development进行生成测试。我的解决方案是保存PRNG种子,因为这会产生一个失败的测试用例,并使用相同的种子运行未来的测试。
我最近得到了一份.NET工作,谷歌发现MbUnit did have支持2004年的生成测试。我也发现了更新的Gallio,但我有一些使用它的麻烦,我不记得到底是什么。
所以,TDD和生成测试不是互相排斥的,Gallio是我见过的唯一最近的.NET选项,我不记得为什么我现在不使用它。
答案 3 :(得分:0)
这是一篇包含基于代码的测试生成工具列表的文章 http://home.mit.bme.hu/~micskeiz/pages/code_based_test_generation.html
答案 4 :(得分:0)
我为.Net
创建了一个单元测试生成器ErrorUnit使用发电机进行TDD开发当然很实用;例如,在对按钮单击发生的事件进行编码时,以TDD方式使用ErrorUnit的方法是:
1)首先手动创建一个测试,以确保有一个按钮按下事件;然后根据纯TDD创建事件和测试。
2)然后运行程序,使用按钮导航到屏幕,并在事件方法中设置断点,按下按钮
3)当点击断点时,您可以点击ErrorUnit' s添加单元测试"生成一个单元测试,其中包含已经模拟的所有对象和当前数据库状态。 (根据需要重复使用不同的用例状态)
4)然后,您可以将创建的单元测试更改为具有Assert,以匹配您希望按钮单击按TDD执行的操作的结果。
5)然后编写click事件后面的代码,并运行由ErrorUnit(对于Arrange和Act)和part自定义(对于Assert)生成的部分的测试。
通过这种方式,您可以节省大部分时间用于输入“安排和行动”。
ErrorUnit也可以与错误记录一起使用,通过在单元中序列化和模拟测试错误时的确切状态来重现其他环境中的错误;将TDD引入生产问题解决方案。