Ziel ist eine 100% ige Java UT-Abdeckung mit einem bestimmten PJ Als ich einen Bericht mit jacoco erstellt habe, Es wird auf der ganzen Linie 0% sein.
Anscheinend mag Jacoco Powermock nicht, einen rauen Mann ... Das heißt, Powermock-Sucht ist ein Tod.
https://github.com/powermock/powermock/wiki/Code-coverage-with-JaCoCo
Second way to get code coverage with JaCoCo - use offline Instrumentation.
Anscheinend Offline-Instrumentierung. Es gibt nur ein Implementierungsbeispiel in Maven und es gibt nicht viele Artikel darüber, wie man in Gradle schreibt. Schreiben wir es also.
build.gradle
dependencies {
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.2.7'
testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.0-beta.5'
testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.0-beta.5'
jacoco group: 'org.jacoco', name: 'org.jacoco.ant', version: '0.8.2', classifier: 'nodeps'
jacocoRuntime group: 'org.jacoco', name: 'org.jacoco.agent', version: '0.8.2', classifier: 'runtime'
}
Bitte beachten Sie übrigens, dass die Offline-Instrumentierung nach 1.6.6 Powermock zu funktionieren scheint.
Offline Instrumentation
build.gradle
configurations {
jacoco
jacocoRuntime
}
task instrument(dependsOn: ['classes']) {
ext.outputDir = buildDir.path + '/classes-instrumented'
doLast {
ant.taskdef(name: 'instrument',
classname: 'org.jacoco.ant.InstrumentTask',
classpath: configurations.jacoco.asPath)
ant.instrument(destdir: outputDir) {
fileset(dir: sourceSets.main.output.classesDir)
}
}
}
gradle.taskGraph.whenReady { graph ->
if (graph.hasTask(instrument)) {
tasks.withType(Test) {
doFirst {
systemProperty 'jacoco-agent.destfile', buildDir.path + '/jacoco/jacoco-coverage.exec'
classpath = files(instrument.outputDir) + classpath + configurations.jacocoRuntime
}
}
}
}
task report(dependsOn: ['instrument', 'test']) {
doLast {
ant.taskdef(name: 'report',
classname: 'org.jacoco.ant.ReportTask',
classpath: configurations.jacoco.asPath)
ant.report() {
executiondata {
ant.file(file: buildDir.path + '/jacoco/jacoco-coverage.exec')
}
structure(name: 'Example') {
classfiles {
fileset(dir: sourceSets.main.output.classesDir)
}
sourcefiles {
fileset(dir: 'src/main/java')
}
}
html(destdir: buildDir.path + '/reports/jacoco/test/html')
}
}
}
Unmittelbar nach dem Kompilieren wird es instrumentiert und es fühlt sich an wie Test + Jacoco. Wenn ich nun versuche, die Aufgabe "Bericht" auszuführen,
PowerMock und Jacoco wurden erfolgreich abgeglichen.
Ich verstehe nicht wirklich, was das Instrument noch tut. Eigentlich handelt es sich um eine Multiprojektkonfiguration, daher möchte ich Berichterstattungsberichte kombinieren.
Beim nächsten Mal werde ich versuchen, verschiedene Dokumente in einem Multiprojekt zu kombinieren.
Recommended Posts