繁体   English   中英

使单元测试快速失败以进行突变测试

[英]Making unit tests fail quickly for mutation testing

突变测试遇到的一个问题是它很慢,因为默认情况下,您会为生成的每个突变执行完整的测试运行(测试文件或一组测试文件)。

使突变测试更快的一种方法是在遇到单个故障时停止针对给定突变体的测试运行(但仅在突变测试期间)。 甚至更好的是突变测试仪要记住什么是第一个杀死最后一个突变体的测试,并首先将其给予下一个突变体。 红宝石中是否有任何东西可以做这些事情,或者是我开始修补猴子的最佳选择?

(是的,我知道单元测试应该很快。并且显示所有失败的测试在突变测试之外是有用的,因为它不仅可以帮助您识别出错误,还可以确定哪里出错了)

编辑 :我目前正在使用测试/单位的heckle。 如果测试/单元无法记住哪些测试在运行之间失败,那么heckle或者运行heckle的东西就能记住它。

一旦遇到失败的示例,我的突变工具使用rspec2 --fail-fast选项立即停止。 与仅执行受影响的单元测试的--rspec-dm2策略一起,我们可以获得非常快速的变异覆盖测试。 请参阅此asciicast进行(速度)演示。

你最好的方法是从github查看heckle源码 ,修补它,并将该补丁提交给开发人员。 你应该能够为heckle编写一个自定义测试运行器。

猴子补丁永远不会是这样的答案。 实际上,猴子补丁几乎不是任何事情的答案。

我开始使用的一种方法是为每个方法编写单元测试,并将它们放在单独的文件中,像rubyspecs一样组织。 我单独运行每个规范,指定我想要解决的确切方法。 我有一个rake任务管理所有这些并在最后打印一个报告失败的突变,如果有的话。

最后,我得到了对每种方法的全面覆盖,无需等待结果。 此外,它甚至比每个人使用的正常方法更好,因为我没有得到任何附带的报道 - 每个方法的规范必须涵盖该方法的所有突变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM