Разница между тестами и этапами покрытия на серверах CI

#unit-testing #continuous-integration #code-coverage

#модульное тестирование #непрерывная интеграция #покрытие кода

Вопрос:

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

введите описание изображения здесь

Ответ №1:

Одна из причин раздельного запуска тестов и покрытия заключается в том, что измерение покрытия требует изменения программы для поддержки сбора информации о покрытии.

В Java и Jacoco, и Cobertura изменят байт-код файлов класса, чтобы добавить инструкции для записи покрытия. В C , чтобы использовать GCov для измерения покрытия, вы компилируете двоичные файлы с флагами, отличными от тех, которые использовались для создания двоичных файлов выпуска.

Поэтому имеет смысл запускать тесты с артефактами выпуска, чтобы получить уверенность в том, что артефакты выпуска ведут себя правильно. Затем измерить покрытие в отдельном запуске с использованием инструментальных артефактов.

Конечно, можно предположить, что артефакты с включенным покрытием будут функционально эквивалентны артефактам выпуска. Следовательно, запускать тесты дважды не требуется. Это зависит от вашего (и ваших компаний) отношения к риску, и вы можете решить запускать тесты дважды (с покрытием и без него) или один раз с включенным покрытием.

Комментарии:

1. спасибо за это объяснение, которое, несомненно, проливает некоторый свет на тему, спасибо.