6

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

使突变测试更快的一种方法是在遇到单个故障时停止对给定突变体的测试运行(但仅在突变测试期间)。更好的办法是让突变测试者记住第一个杀死最后一个突变体的测试是什么,然后把它首先交给下一个突变体。ruby 中有什么东西可以做这些事情,或者我最好的选择是开始猴子补丁?

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

编辑:我目前正在使用带有测试/单元的 heckle。如果测试/单元无法记住在运行之间哪些测试失败,也许 heckle 或运行 heckle 的东西可以记住它。

4

3 回答 3

2

最好的办法是从 github 上查看heckle 源,对其进行修补,然后将该修补程序提交给开发人员。您应该能够为 heckle 编写自定义测试运行程序。

猴子修补永远不是解决此类问题的方法。事实上,猴子补丁几乎从来都不是解决问题的办法。

于 2009-04-16T17:00:27.677 回答
2

一旦遇到失败的示例,我的突变工具使用 rspec2选项立即停止。--fail-fast连同--rspec-dm2只执行受影响的单元测试的策略,我们得到了非常快速的变异覆盖测试。有关(速度)演示,请参阅此asciiccast

于 2012-12-10T09:22:33.607 回答
1

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

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

于 2010-04-29T02:55:09.257 回答