Как сказать PIT, чтобы он не изменял некоторые определенные части кода?

Бывает, что иногда есть строки кода или методы, которые не могут произвести мутантов, которые будут убиты любым соответствующим тестом. (Например, я могу использовать объект с нулевым шаблоном, и некоторые из реализованных методов не имеют отношения к prod, поэтому любая реализация (даже бросок) будет правильной).

Было бы неплохо иметь возможность указать pit, чтобы избежать их (чтобы охват мутаций был более актуальным), но я не смог найти способ сделать это в документации.

Есть ли способ сделать это?

1 ответ

Решение

В настоящее время PIT имеет три механизма, с помощью которых код может быть отфильтрован.

  1. По классу, используя excludedClasses параметр
  2. По методике с использованием excludedMethods
  3. Использование пользовательского фильтра мутаций

Для вашего случая использования это звучит как вариант 1 подойдет.

Вариант 2 позволяет фильтровать метод только во всех классах (это чаще всего используется для предотвращения мутаций в методах toString или hashcode).

Вариант 3 немного сложен, но позволит вам (например) отфильтровать методы с определенной аннотацией.

Фильтрация по аннотации запрашивалась несколько раз и, вероятно, со временем добавит основную кодовую базу. Основная проблема с ним является концептуальной, поскольку она требует от вас загрязнения производственного кода проблемой тестирования.


В сторону.

Я не следую вашему примеру шаблона нулевого объекта.

Нулевой объект должен реализовывать все методы интерфейса, и ожидается, что они будут вызваны. Если бы они бросили это сломало бы образец.

В наиболее распространенной версии шаблона методы будут пустыми, поэтому нечего будет мутировать, кроме возвращаемых значений.

Такое поведение стоило бы описать с помощью тестов. Если ваш нулевой объект не сможет вернуть значения, которые считаются нейтральными, это вызовет проблему.

Другие вопросы по тегам