Що таке Code Coverage?
Code Coverage (покриття коду) - це певна величина, що показує відсоток виконаного вихідного коду, під час тестування. Окей, тут начебто все ясно. Відсоток Code Coverage (покриття коду, далі просто CC) може коливатися від 0 до 100, і може виникнути питання, чи потрібно прагнути максимального відсотка CC? Моя відповідь така: і так і ні. Чому так? Допустимо ви створюєте проект, який буде використовуватися деякими іншими проектами, в ньому повно функціоналу, і серед всього жаху є гетери та сеттери, і їх не мало. При покритті функціоналу покрабося не всі, скажімо, гетери, але ви точно знаєте, що ті, які не покрабося, і не викликаються у вашому проекті, але гетери не завжди пишуться "для себе", тому вони потрібні для "клієнта". Що ж робити? Покрити кожен гетер окремо? Це буде неефективне тестування. Але якщо не покрити їх, ми не досягнемо максимального відсотка CC. Тут виникає палиця двох кінців.Для чого нам потрібно Code Coverage?
Я думаю на це питання відповідь буде дуже проста: Будь-який код потребує тестування, щоб при рефакторингу або при додаванні/зміні функціоналу не виникли "невидимі" баги, і ми їх могли відстежити. Не будемо ж ми бігати фреймворками з breakpoint і дебаггером і ловити цього підлого Бага. Життя занадто коротке. Отже , найцікавіше. Завдання таке: Впровадити в наш open-source project , який ми написали на попередній статті , технологію, яка збиратиме інформацію про CC, оброблятиме десь її, і буде можливість помістити цю інформацію у себе на GitHub у формі бейджика, наприклад. Усі вихідні коди будуть викладені на моєму GitHub .-
Почнемо з вибору плагіна для збирання інформації про покриття коду в одну купу. Я особисто для себе вибрав JaCoCo , який саме збирає інформацію про покриття коду. Але є й альтернативи .
Сайт JaCoCo пропонує нам скачати плагін, але качати ми нічого не будемо, адже ми використовуємо Build System Maven. Заходимо в Maven Repository і шукаємо JaCoCo Plugin . Беремо останню версію і вставляємо в наш pom.xml залежність.
Але через dependencies я робити не рекомендую , адже є найкращий, функціональніший альтернативний варіант, і навіть не один.
-
Заходимо CodeCov Setup вибираємо мову Java та вибираємо Using JaCoCo плагін, і ставимо за інструкцією.
-
За тим самим посиланням вибираємо Using Maven . Цей варіант буде навіть кращим. Cobertura витягуватиме інформацію з CI тестів, але на жаль і тут є каверза. Все, що вище JDK 7 (А на даний момент вже 10 є) не підійде . Тому ми зупинимося на 1 варіанті.
В результаті в нашому pom.xml мало з'явитися щось на кшталт того:
<!-- JaCoCo plugin --> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.1</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin>
І в Maven Projects у списку плагінів з'явиться JaCoCo Plugin:
-
-
Плагін стоїть. Все начебто чудово. Але якщо ви уважно читали інструкцію з встановлення JaCoCo плагіна, там була вказівка додати в .travis.yml рядок, що відповідає за відправку звіту плагіна на сайт Codecov .
Отже, виходячи з Using JaCoCo нам потрібно вписати в наш файл:
after_success: - bash <(curl -s https://codecov.io/bash)
Вписали. Чудово.
-
Все начебто готове і залишабося фінальні штрихи. По-перше, давайте скомпілюємо наш код, і запустимо всі тести, причому зробимо це через Lifecycle Maven:
Так як у нас у плагіні JaCoCo стоїть фаза виконання test, то мав з'явитися звіт після виконання циклу тестів Maven у папці target:
-
Підходимо до завершення. Ми бачимо, що все працює чудово, залишилося лише переконається, що це "все прекрасно" також буде працювати на зовнішніх джерелах. Настав час зібрати все в купу. Збираємо проект і робимо push на GitHub, перед цим відкривши Travis CI та Codecov для моніторингу того, що відбувається.
Після push ми бачимо що збирання є успішним:
І результат JaCoCo плагіна про покриття коду:
-
Пам'ятаєте наше завдання? Так, так, ми забув про бейджик. Я хотів винести тему "Прикраса" open-source project'ів в окрему статтю, але маленьку частину все ж таки залишу тут.
Отже, покрокова інструкція що б не заблукає:
-
Переходимо на сайт Codecov ;
-
Вибираємо проект, який вам потрібний;
-
Вибираємо Setting:
-
Вибираємо Badge і бачимо посилання на ваш бейджик у різних формах подання:
Перші це стандартні бейджики, їх можна вставити, наприклад, у README.md:
Їх особливість у тому, що при натисканні на них вас буде перенаправляти на сторінку зі звітом про CC;
Другі це графи, таблиці тощо.
-
- Мій тестовий проект , який ви можете завантажити, подивитися, оцінити. Все за цією статтею знаходиться у branch: JaCoCo;
- Java Code Coverage Tools ;
- Альтернативи JaCoCo;
- JaCoCo Library ;
- JaCoCo Maven Plugin Dependency ;
- Codecov туторіал з налаштування;
- Власне налаштування самого JaCoCo ;
- Налаштування Cobertura ;