2016-09-12 10 views

Odpowiedz

10

Plugin JUnit Platform Gradle generuje raporty testowe XML w stylu JUnit 4.

Te pliki XML są domyślnie przesyłane do build/test-results/junit-platform.

Tak więc, jeśli twój serwer budujący wie, jak analizować raporty XML w stylu JUnit 4, możesz po prostu wskazać pliki XML w tym katalogu i pozwolić serwerowi kompilacji wygenerować raport HTML.

Jeśli jednak pytasz, czy Gradle może wygenerować raport HTML dla twoich testów uruchamianych za pomocą zadania junitPlatformTest, wówczas odpowiedź brzmi "Nie, niestety nie". Powodem jest to, że standardowe zadanie Gradle test generuje tylko raporty HTML oparte na własnym zastrzeżonym formacie raportu "binarnego". Ponieważ zadanie junitPlatformTest nie generuje raportów w formacie binarnym Gradle, samo Gradle nie może generować raportów HTML dla testów platformy JUnit.

Powiedziawszy to, istnieje jednak pewna praca: możesz użyć Anta w swojej kompilacji Gradle. Ant ma zadanie agregowania raportów XML opartych na JUnit 4 i generowania raportu HTML z tych zagregowanych raportów. Wynik nie jest bardzo nowoczesny, ale jest co najmniej czytelny dla człowieka. Wadą jest to, że domyślny arkusz stylów XSLT nie wyświetla nazw klas testowych dla testów przeprowadzanych przez platformę JUnit.

W każdym przypadku możesz skonfigurować zadanie Anta JUnitReport w Gradle w następujący sposób.

junitPlatform { 
    // configure as normal 
} 

configurations { 
    junitXmlToHtml 
} 

task generateHtmlTestReports << { 
    def reportsDir = new File(buildDir, 'test-reports') 
    reportsDir.mkdirs() 

    ant.taskdef(
     name: 'junitReport', 
     classname: 'org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator', 
     classpath: configurations.junitXmlToHtml.asPath 
    ) 

    ant.junitReport(todir: "$buildDir/test-results/junit-platform", tofile: "aggregated-test-results.xml") { 
     fileset(dir: "$buildDir/test-results/junit-platform") 
     report(format: 'frames', todir: reportsDir) 
    } 
} 

afterEvaluate { 
    def junitPlatformTestTask = tasks.getByName('junitPlatformTest') 
    generateHtmlTestReports.dependsOn(junitPlatformTestTask) 
    check.dependsOn(generateHtmlTestReports) 
} 

dependencies { 
    // configure as normal ... 

    junitXmlToHtml 'org.apache.ant:ant-junit:1.9.7' 
} 

Następnie wykonując gradle check wygeneruje raport HTML w build/test-reports/index.html.

Pozdrawiam,

Sam (Rdzeń JUnit 5 committer)

+0

Tak więc, jeśli rozumiem to poprawnie, jest to spowodowane zmianami między JUnit4 i JUnit5, prawda? –

+0

Tak. Platforma JUnit (część "JUnit 5") zapewnia więcej informacji do raportowania niż JUnit 4, a zatem nie mapuje na wbudowaną infrastrukturę testową w Gradle (która opiera się na JUnit 4). –

+1

Możesz zapoznać się z następującym wydaniem aktualizacji oficjalnej pomocy JUnit Platform od zespołu Gradle: https://github.com/gradle/gradle/issues/828 –

-1

Tak, można użyć wtyczki Jacoco.

Oto przykład:

apply plugin: 'war' or apply plugin: 'java' 
apply plugin: "jacoco" 

test { 
    reports.junitXml.destination="build/test-results" 
    jacoco { 
     destinationFile = file("build/jacoco/jacoco.exec") 
     append=true 
    } 
} 

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

Pozdrawiam.

+0

Cóż, ten fragment kodu jest JUnit 4.x –

+0

Jacoco tworzy raport pokrycia, inny niż raport o sukcesie testu! –

Powiązane problemy