【问题标题】:Making unit tests fail quickly for mutation testing使单元测试快速失败以进行突变测试
【发布时间】:2010-10-19 18:24:29
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你如何运行这些测试......?

标签: ruby unit-testing mutation-testing


【解决方案1】:

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

猴子补丁永远不是解决此类问题的方法。事实上,猴子补丁几乎永远不会解决任何问题。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多