코드 커버리지란 무엇입니까?
코드 적용 범위는 테스트 중에 완료된 소스 코드의 비율을 보여주는 특정 값입니다. 좋아요, 여기서는 모든 것이 명확해 보입니다. 코드 적용 범위 백분율은 0에서 100까지이며 다음과 같은 질문이 발생할 수 있습니다. 최대 CC 백분율을 위해 노력해야 합니까? 내 대답은: 예, 아니오입니다. 왜 그런 겁니까? 다른 프로젝트에서 사용할 프로젝트를 생성한다고 가정해 보겠습니다. 이 프로젝트에는 기능이 풍부하고 모든 공포 중에는 getter와 setter가 있으며 그 중 상당수가 있습니다. 기능을 다룰 때 getter가 모두 다루어지는 것은 아니지만 다루지 않은 기능은 프로젝트에서 호출되지 않지만 getter가 항상 "자체적으로" 작성되는 것은 아니므로 " 고객". 무엇을 해야 할까요? 각 게터를 별도로 덮으시겠습니까? 이는 효과적인 테스트가 아닙니다. 하지만 이를 다루지 않으면 최대 CC 비율을 달성할 수 없습니다. 양날의 검이 나오는 곳이다.코드 커버리지가 필요한 이유는 무엇입니까?
이 질문에 대한 대답은 매우 간단할 것이라고 생각합니다. 모든 코드는 리팩터링이나 기능 추가/변경 시 "보이지 않는" 버그가 발생하지 않고 추적할 수 있도록 테스트가 필요합니다. 우리는 중단점과 디버거가 있는 프레임워크를 실행하여 이 사악한 버그를 포착하지 않을 것입니다. 인생이 너무 짧. 예 그래서 가장 흥미로운 점은 다음과 같습니다. 과제는 다음과 같습니다. 이전 기사 에서 작성한 오픈 소스 프로젝트 에 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 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;
- Java 코드 적용 도구 ;
- JaCoCo 대안 ;
- 자코코 도서관 ;
- JaCoCo Maven 플러그인 종속성 ;
- Codecov 설정 튜토리얼 ;
- 실제로 JaCoCo 자체를 설정합니다 .
- Cobertura 설정 ;
GO TO FULL VERSION