Я пытаюсь настроить покрытие кода для проекта приложения Java.
Название проекта: NewApp
Структура проекта:
- src / java / ** (исходный код)
- src / java-test (модульные тесты - Jnuit)
- test / it-test (интеграционный тест)
- test / at-tests (приемочные испытания)
- tomcat / * (содержат сценарии запуска / остановки tomcat)
- xx / .. etc, необходимые для обычного приложения.
Версия Gradle: 1.6
Окружающая среда: Linux
У меня есть запущенный скрипт сборки gradle, который извлекает зависимости приложения (NewApp) (то есть служебные банки, используемые приложением для процесса сборки) из репозитория артефактов сборки (artifactory / maven для ex) и создает приложение.
На этом этапе я хотел получить покрытие кода с помощью плагина JaCoCo для моего проекта приложения NewApp.
Я следил за документацией для Gradle / Jacoco, но, похоже, он не создает никаких отчетов / ... папку для jacoco и т.д., где я могу найти, что сделал отчет о покрытии Jacoco.
Мои вопросы: 1. Для получения покрытия кода с помощью модульных тестов (Junit) я предполагаю, что все, что мне нужно сделать, это следующее, и это НЕ потребует от меня запуска / остановки tomcat перед запуском модульного теста (тестовая задача, например, "gradle test" ), чтобы получить покрытие кода для / с помощью модульных тестов. Посоветуйте пожалуйста / поправьте. Код (только для части модульного тестирования Gradle jacoco) - я использую:
apply plugin: 'jacoco'
test {
include 'src/java-test/**'
}
jacocoTestReport {
group = "reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled true
html.enabled true
csv.enabled false
}
//classDirectories = fileTree(dir: 'build/classes/main', include: 'com/thc/**')
//sourceDirectories = fileTree(dir: 'scr/java', include: 'com/thc/**')
additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
}
и для интеграционных тестов:
task integrationTest(type: Test) {
include 'test/java/**'
}
Поскольку jacocoTestReport зависит от тестовой задачи (задач), они будут вызываться сначала, а затем, наконец, jacocoTestReport сообщит о том, что он нашел для покрытия кода.
- Чтобы получить покрытие кода для интеграционных тестов, я предполагаю, что я должен сначала запустить tomcat (т.е. перед запуском / вызовом тестовой цели для интеграционных тестов), затем вызвать задачу «gradle integrationTest» или «gradle test», а затем остановить tomcat - чтобы получить код отчет о покрытии. Из других сообщений в блоге я также обнаружил, что нужно настроить переменную JAVA_OPTS для назначения агента jacoco перед запуском tomcat.
например: установка переменной JAVA_OPTS, например:
export JACOCO="-Xms256m -Xmx512m -XX:MaxPermSize=1024m -javaagent:/production/jenkinsAKS/jobs/NewApp/workspace/jacoco-0.6.3.201306030806/lib/jacocoagent.jar=destfile=/production/jenkinsAKS/jobs/NewApp/workspace/jacoco/jacoco.exec,append=true,includes=*"
export JAVA_OPTS="$JAVA_OPTS $JACOCO"
Будучи новичком в Gradle / groovy - я не уверен, какой код мне следует написать в build.gradle (скрипт сборки), чтобы заставить работать вышеуказанные тесты интеграции / модуля, если они включают запуск / остановку tomcat. Если кто-то может предоставить образец сценария для этого, я попробую.
Я не получаю никакого покрытия кода прямо сейчас, когда я публикую покрытие кода Jacoco в Jenkins (с использованием действия Jenkins post build для публикации отчетов Jacoco). На панели инструментов сборки Jenkins отображается 0% покрытия кода (т. Е. Столбцы показывают весь красный цвет, а зеленый - фактическое покрытие кода).
Нужен ваш совет, чтобы разобраться в этом.