Cos'è la copertura del codice?
La Code Coverage è un determinato valore che ci mostra la percentuale di codice sorgente completato durante il test. Ok, qui sembra tutto chiaro. La percentuale di Code Coverage può variare da 0 a 100 e potrebbe sorgere la domanda: dovresti cercare di raggiungere la percentuale CC massima? La mia risposta è: sì e no. Perché? Diciamo che crei un progetto che verrà utilizzato da altri progetti, è pieno di funzionalità e tra tutto l'orrore ci sono getter e setter, e ce ne sono parecchi. Quando si copre la funzionalità, non tutti, ad esempio, i getter sono stati coperti, ma sai per certo che quelli che non sono stati coperti non vengono chiamati nel tuo progetto, ma i getter non sono sempre scritti "per se stessi", quindi sono necessari per " cliente". Cosa fare? Coprire ciascun getter separatamente? Questo non sarà un test efficace. Ma se non li copriamo, non raggiungeremo la percentuale massima di CC. È qui che emerge un’arma a doppio taglio.Perché abbiamo bisogno della Code Coverage?
Penso che la risposta a questa domanda sarà molto semplice: qualsiasi codice necessita di essere testato in modo che durante il refactoring o l'aggiunta/modifica di funzionalità non si verifichino bug "invisibili" e possiamo monitorarli. Non esamineremo framework con punti di interruzione e debugger per individuare questo vile bug. La vita è troppo breve. Esempio Quindi, la cosa più interessante. Il compito è questo: introdurre nel nostro progetto open source , di cui abbiamo scritto nell'articolo precedente , una tecnologia che raccoglierà informazioni su CC, le elaborerà da qualche parte e sarà possibile inserire queste informazioni su GitHub sotto forma di un distintivo, per esempio. Tutto il codice sorgente verrà pubblicato sul mio GitHub .-
Iniziamo scegliendo un plugin per raccogliere le informazioni sulla copertura del codice in una pila. Personalmente ho scelto JaCoCo , che raccoglie informazioni sulla copertura del codice. Ma ci sono anche delle alternative .
Сайт 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 plugin, там было указание, добавить в .travis.yml строчку, отвечающую за отправку отчёта plugin на сайт Codecov.
Итак, исходя из Using JaCoCo, нам нужно вписать в наш файл:
after_success: - bash <(curl -s https://codecov.io/bash)
Вписали. Отлично.
-
Все вроде готово, и остались финальные штрихи. Во-первых давайте скомпorруем наш code, и запустим все тесты, причем сделаем это через Lifecycle Maven:
Так How у нас в плагине JaCoCo стоит фаза выполнения test, то должен был появится отчет после выполнения цикла тестов Maven в папке target:
-
Подходим к завершению. Мы видим что все работает прекрасно, осталось лишь убедится что это "все прекрасно" также будет работать на внешних источниках. Настала пора собрать все в кучу. Собираем проект и делаем push на GitHub, перед этим открыв Travis CI и Codecov для мониторинга происходящего.
После push мы видим что сборка успешная:
И результат JaCoCo plugin о покрытии codeа:
-
Помните нашу задачу? Да, да, мы забыл про бейджик. Я хотел вынести тему "Украшение" open-source project'ов в отдельную статью, но маленькую часть все же оставлю здесь.
Итак, пошаговая инструкция что бы не заблудится:
-
Переходим на сайт Codecov;
-
Выбираем проект, который вам нужно;
-
Выбираем Setting:
-
Выбираем Badge и видим ссылки на ваш бейджик в несколько различных формах представления:
Первые это стандартные бейджики, их можно вставить, например, в ваш README.md:
Их особенность в том что при кликании на них вас будет перенаправлять на page с отчетом о CC;
Вторые это графы, таблицы и тому подобные штуки:
-
- Мой тестовый проект, который вы можете скачать, посмотреть, оценить. Все по этой статье находится в branch: JaCoCo;
- Strumenti di copertura del codice Java ;
- Alternative JaCoCo ;
- Biblioteca JaCoCo ;
- Dipendenza del plugin JaCoCo Maven ;
- Tutorial sull'installazione di Codecov ;
- In realtà sta creando JaCoCo stesso ;
- Costituzione di Cobertura ;
GO TO FULL VERSION