Тесты JUnit проходят, но PIT говорит, что набор не зеленый

При попытке запустить тест мутации PIT я получаю следующую ошибку:

mutationCoverage не удалось: все тесты не прошли без мутации при расчете охвата линии. Для тестирования мутации требуется зеленый набор.

Тесты выполняются очень хорошо, когда я выполняю обычную тестовую сборку, но при запуске фазы тестирования мутаций они, предположительно, терпят неудачу, но подробности не приводятся о том, почему. Я рассмотрел причины, перечисленные в Часто задаваемые вопросы по тестированию на PIT, но я до сих пор не знаю, что может быть неправильным.

Я пробовал:

  • добавление опции -Dthreads = 1 к правилу любой проблемы с несколькими потоками.
  • не удалось найти какие-либо системные свойства, уникальные тесты пары, которые терпят неудачу
  • тесты не игнорируются при обычных прогонах

Какие еще вещи я должен попробовать? Или другие способы отладки того, что здесь можно было бы сделать?

Ответы

Ответ 1

Общими причинами неудачных тестов на этапе покрытия являются

  • Тесты на выбор PIT, не включенные/исключенные в обычном тестовом конфиге
  • Тесты полагаются на переменную среды или другое свойство, установленное в тестовой конфигурации, но не устанавливаемое в конфигурацию pitest
  • Тесты имеют зависимость скрытого порядка, которая не отображается во время обычного тестового прогона.
  • PIT не нравится что-то в вашем техническом стеке - возможно, тестировщик JUnit

Похоже, что вы удалили 1 и 2. так, чтобы у вас осталось 3 и 4.

Зависимости тестового заказа могут быть трудно выявлены. Если ответ "да" на любой из них, у вас может быть один.

  • Включает ли ваша кодовая база изменяемое статическое состояние? (например, в одиночных клетках)
  • Выполняют ли ваши тесты попадание в базу данных (в памяти или в противном случае), где можно сохранять состояние между тестами?
  • Могут ли ваши тесты модифицировать файлы на диске?

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

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

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