Я работаю над проектом, который имеет много устаревшего кода, который не покрывается испытаниями.Непрерывная интеграция: убедитесь, что новые коммиты покрыты тестами
Есть ли способ настроить сервер интеграции, чтобы проверить, что все новые коммиты имеют минимальное количество тестов (например, покрытие составляет> 70%)?
По существу, я вижу два варианта:
- Каким-то образом настроить сервер CI сбой сборки, когда совершенные изменения не покрыты модульных тестов. Это гарантирует, что каждый кусок нового кода будет иметь тесты и что тесты для устаревшего кода будут увеличиваться с каждым изменением.
- Установите порог покрытия для всего проекта и не выполните сборку, если процент покрытия уменьшается после фиксации. Проблема заключается в том, что если я удалю класс, содержащий 100 инструкций, и добавлю новый класс с 50 инструкциями, процент покрытия будет расти без меня, когда я буду писать какие-либо тесты.
Мне нравится вариант 1 еще потому, что он заставляет изменения устаревшего кода подвергаться модульной проверке. Это должно увеличить общий охват тестирования.
Сейчас мы используем Jenkins как наш сервер CI и JaCoCo для покрытия тестов. Maven используется для создания проекта, а SVN - наш основной источник контроля.
Имейте в виду, что покрытие 100% не обязательно возможно или даже желательно. Также можно манипулировать номерами покрытия; написание единичного теста для тестового класса может искусственно раздуть ваше тестовое покрытие. –
@MikeRylander Я знаю это, я даже не мечтаю о 100% охвате этого проекта. Но я по-прежнему считаю, что заставлять новые изменения иметь хотя бы некоторое освещение. –
В настоящее время я работаю над решением этой проблемы, которая в основном касается комментария @MikeRylanders. http://pitest.org теперь интегрирован с контролем версий. Следующая версия позволит анализировать файлы по статусу scm. Следующий выпуск позволит провести анализ по диапазону дат или фиксации, что позволит серверу сборки проверить, что модифицированный код соответствует заданной оценке мутации. – henry