2016-10-10 6 views
5

У меня есть файл build.gradle, который может успешно запускать тесты на единицу и интеграцию отдельно или вместе (с помощью команды типа интеграция тестов gradle testTest для совместного использования). Оба используют Junit, я использую Gradle 3, и это не проект Android. Отчет об успехе создается для каждого, в отдельных каталогах. Я также могу успешно сгенерировать отчет Jacoco для unit тестовое покрытие с gradle test jacoco. Я не могу получить отчет о покрытии для моих других рабочих интеграционных тестов, используя gradle integrationTest jacoco, хотя тест успешно выполняется и создается файл integrationTest.exec.build.gradle с плагином Jacoco не генерирует отчет о покрытии для тестов интеграции.

Чтобы быть более явным, я получаю отчет об охвате тестирования объекта в сборке/reports/index.html, а отчеты Junit в сборке/отчетах/test/index.html и build/reports/integrationTest/index.html. Создается каталог build/reports/jacoco, но содержит только пустой «тестовый» каталог. build/также содержит каталог jacoco /, содержащий файлы .exec и classpathdumps.

Вот мое сокращенное build.gradle

apply plugin: 'java' 
apply plugin: 'application' 
apply plugin: 'jacoco' 

repositories { 
    mavenCentral() 
} 

sourceSets { 
    main { 
     java { 
      srcDirs = ['src/java'] 
     } 
     test { 
      java { 
       srcDirs = ['test/java'] 
      } 
     } 
     resources { 
      srcDirs = ['src/java', 'conf', 'resource'] 
     } 
    } 

    integrationTest { 
     java { 
      compileClasspath += main.output + test.output 
      runtimeClasspath += main.output + test.output 
      srcDir file('integration_test/java') 
     } 
    } 
} 

test { 
    jacoco { 
     append = false 
     destinationFile = file("$buildDir/jacoco/jacocoTest.exec") 
     classDumpFile = file("$buildDir/jacoco/classpathdumps") 
    } 
} 

configurations { 
    integrationTestCompile.extendsFrom testCompile 
    integrationTestRuntime.extendsFrom testRuntime 
} 

/* SNIP */ 

task integrationTest(type: Test) { 
    dependsOn startserver 

    testClassesDir = sourceSets.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 
} 
integrationTest.finalizedBy stopserver 

check.dependsOn integrationTest 
integrationTest.mustRunAfter test 

tasks.withType(Test) { 
    reports.html.destination = file("${reporting.baseDir}/${name}") 
} 

jacoco { 
    toolVersion = "0.7.6.201602180812" 
} 

jacocoTestReport { 
    reports { 
     xml.enabled false 
     csv.enabled false 
     html.destination "$buildDir/reports" 
    } 
} 

Я видел существующие вопросы объединения двух отчетов, генерации отчетов тестирования интеграции Junit я уже есть, и подобные, но в конечном счете, бесполезные вопросы о Maven и Ant. Самое близкое, что я нашел, было this, но ничего, что я пробовал адаптироваться от него, было плодотворным. Кажется, что есть similar question, но с меньшим количеством их build.gradle, и единственный ответ - это недопустимый ответ автора на вопрос в предыдущей ссылке.

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

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

Есть ли что-нибудь, что я могу сделать, чтобы получить покрытие интеграции?

[Первая править] Я создал небольшой GitHub репо, который имеет все необходимое, чтобы воспроизвести эту проблему: https://github.com/micseydel-tile/gradle-jacoco-integration-test

ответ

1

Вы можете сделать как тестовые задания записи в том же файле назначения, и они добавить в существующий файл если таковые имеются. Таким образом, вы можете запускать любую из тестовых задач и просматривать охват отдельно в отчете HTML. Этот фрагмент кода из вашей маленькой GitHub репо

`task integrationTest(type: Test) {jacoco { 
    append = true 
    destinationFile = file("$buildDir/jacoco/jacocoTest.exec") 
    classDumpFile = file("$buildDir/jacoco/classpathdumps") 
} 
testClassesDir = sourceSets.integrationTest.output.classesDir 
classpath = sourceSets.integrationTest.runtimeClasspath}` 

вы можете просто добавить блок кода jacoco и включите добавления.