2017-01-31 2 views
2

Задача: У меня огромная база кода с большим количеством тестов. При добавлении теста я понял, что некоторые существующие модульные тесты в них охватывают одни и те же классы/функции дважды или чаще. Те тесты находятся в разных местах, поэтому трудно понять, что они тестируют один и тот же код.Поиск дублирующих модульных тестов по одному и тому же кодам

В этом коде нет аннотаций @covers. Поэтому я не могу использовать их для идентификации «избыточно проверенного» кода.

PHPUnit может обрабатывать множество флагов командной строки для, например, бесполезные тесты с --report-useless-tests. Было бы здорово, если бы было --report-redunant-tests, но, как я вижу, такой опции нет.

Вопрос: Знаете ли вы, как узнать, какой код тестируется дважды и какой модульный тест отвечает за эти тесты?

Справочная информация: При удалении избыточных тестов я хочу утверждать следующее.

  1. Код, отвечающий за тестирование, должен быть полным, но небольшим, насколько это возможно.
  2. Если какая-либо функциональность меняется, в идеале вам нужно только отрегулировать один случай проверки.
  3. Сократите время выполнения всего пакета тестов модулей.

ответ

2

Действительно сложно обнаружить «избыточный» тест. Даже если несколько тестов проходят через один и тот же код, они могут тестировать разные сценарии, поэтому все они имеют значение. Однако я вижу, как несколько тестов могут замедлить ваш процесс.

Мое предложение состоит в том, чтобы взглянуть на опции coverage-*. Запуск отчета о покрытии, например, одного HTML, позволяет вам просматривать код и указывать, какие строки/классы покрываются каждым тестом. Это предназначено для ручного использования, если вы хотите автоматизировать, посмотреть другие типы отчетов и извлечь нужные вам данные.

Однако, хорошее место для начала:

phpunit --coverage-html /tmp/coverage 

Успехов!

+0

спасибо. Конечно, они могут тестировать разные сценарии, я не думал об этом сначала :(Но я хочу хотя бы попробовать и понять, какой тест может быть «действительно» устаревшим. Но да, было бы очень сложно классифицировать правильно. Я рассмотрю различные варианты покрытия. Вариант PHP выглядит наиболее перспективным. – cb0

Смежные вопросы