【问题标题】:How to tell PIT to not mutate some specific portions of code?如何告诉 PIT 不要改变代码的某些特定部分?
【发布时间】:2015-12-18 07:44:05
【问题描述】:

有时会发生一些代码行或方法无法产生将被任何相关测试杀死的突变体。 (例如我可能使用了一个空模式对象,并且一些实现的方法与 prod 无关,因此任何实现(甚至抛出)都是正确的。

能够告诉pit避免它们会很好(这样突变覆盖率更相关),但我在文档中找不到方法。

有办法吗?

【问题讨论】:

    标签: pitest


    【解决方案1】:

    PIT 目前有三种过滤代码的机制。

    1. 使用excludedClasses参数按类
    2. 通过使用excludedMethods的方法
    3. 使用自定义mutation filter

    对于您的用例,听起来选项 1 很合适。

    选项 2 只允许在所有类中过滤一个方法(这最常用于防止 toString 或 hashcode 方法的突变)。

    选项 3 有点复杂,但允许您(例如)过滤掉带有特定注释的方法。

    现在已经多次请求按注释过滤,最终可能会添加主代码库。它的主要问题是概念问题,因为它要求您用测试问题污染您的生产代码。


    顺便说一句。

    我没有按照你的空对象模式示例。

    一个空对象需要实现一个接口的所有方法,并且期望它们被调用。如果他们扔了这会打破这种模式。

    在最常见的模式版本中,方法是空的,所以除了返回值之外没有什么可以改变的。

    这种行为值得用测试来描述。如果您的 null 对象未能返回任何被认为是中性的值,这将导致问题。

    【讨论】:

    • 感谢您的回答。对于我的空对象示例,我必须承认我在实践中处于特定情况。我的界面有方法hasValuegetValue。我的空对象为hasValue 返回false,为getValue 返回null,但我的代码库的其余部分并不关心null,因为它永远不会因为false 而调用此方法。 (是的,我仍然可以对其进行单元测试,但我更喜欢小型集成测试)
    • @henry 你有一个如何使用excludedMethods 的例子吗?文档中提到了一个 glob,但我不确定如何使用它。
    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多