Es hat einen starken Aspekt in meiner Arbeitsaufzeichnung, aber ich habe ein Arbeitsverfahren für den Inhalt des Titels erstellt, daher werde ich es veröffentlichen.
Dies ist das Verfahren zum Übertragen von Ergebnissen der Abdeckungsmessung an Codecov während der Wercker-Erstellungsphase im GitHub-Repository von Java-Anwendungen mit Gradle.
Codecov
URL
https://codecov.io/gh
Ich habe mich gefragt, welchen ich mit Overalls verwenden soll, aber ich habe Referenzartikel zugestimmt und mich für Codecov entschieden.
Jacoco
Wird zur Messung der Abdeckung verwendet. Lauf von Gradle weg.
Der neuen Java-Syntax wurden verschiedene Optionen hinzugefügt, z. B. ob sie abgedeckt werden soll. Referenzartikel
Wenn für implizite Konstruktoren, für die kein Konstruktor deklariert wurde, der Testcode für den Konstruktor (Instanziierung) nicht geschrieben wurde, behandelt Jacoco ihn als nicht bestanden und die Abdeckungsrate verringert sich. Dies kann beispielsweise in einer Dienstprogrammklasse mit statischen Methoden geschehen. Für Klassen, die nicht instanziiert sind, sollte der Konstruktor sorgfältig privat sein, obwohl er möglicherweise etwas redundant ist. Dann wird Jacoco den Konstruktor als nicht abgedeckt behandeln und die Abdeckung wird nicht unnötig abfallen. Wenn Sie den Konstruktor explizit deklarieren, sollte er aus dem Produktcode verwendet werden. Schreiben Sie den Testcode daher ordnungsgemäß.
Es scheint, dass es von Jacoco 0.8.0 unterstützt wurde
Fügen Sie build.gradle Folgendes hinzu.
//Geben Sie das Jacoco-Plug-In für Codecov an
apply plugin: 'jacoco'
jacoco {
//Versionsinformationen sind http://www.eclemma.org/jacoco/Sehen
toolVersion = "0.8.1"
}
jacocoTestReport {
reports {
xml.enabled = true
html.enabled = true
}
}
//Wenn Sie Gradle Build ausführen, führen Sie auch die Abdeckungsmessung in Jacoco durch
build.dependsOn jacocoTestReport
Im Referenzbeispiel wurde auch die Java-Version von targetCompatibility beschrieben, daher habe ich auch Folgendes hinzugefügt.
targetCompatibility = 10
Rückblickend, einschließlich der bisherigen Anhäufung.
//Geben Sie das Java-Plug-In an, um main bzw. test zu erstellen
apply plugin: 'java'
//Geben Sie ein Kriegs-Plugin für das Verpacken in den Krieg an
apply plugin: 'war'
//Geben Sie das Anwendungs-Plug-In an, um die ausführbare Klasse und die Klasse mit der ausführbaren Hauptmethode anzugeben.
apply plugin: 'application'
//Geben Sie die Ausführungszielklasse an
mainClassName = 'kentfordevgithub.helloworld.HelloWorld'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 10
targetCompatibility = 10
//Geben Sie das zu verwendende Repository an
repositories {
//Verwenden Sie das Maven-Repository
mavenCentral()
}
dependencies {
// JUnit
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.2.0'
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.2.0'
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.2.0'
}
//Testlaufeinstellungen in Gradle
test {
//Einstellungen für die Ausführung von Junit5 mit Gradle, Gradle4.Kann beschrieben werden, weil Gradle Junit 5 von 6 nativ unterstützt
useJUnitPlatform()
//Anzahl der parallelen Testgewinde(Anzahl gleichzeitiger Ausführungen)Der Satz(1 Thread für jede Testklasse)
maxParallelForks = 4
}
//Geben Sie das IDE-Plug-In an, um jede IDE zu unterstützen
apply plugin: 'eclipse'
apply plugin: 'idea'
//Geben Sie das Jacoco-Plug-In für Codecov an
apply plugin: 'jacoco'
jacoco {
//Versionsinformationen sind http://www.eclemma.org/jacoco/Sehen
toolVersion = "0.8.1"
}
jacocoTestReport {
reports {
xml.enabled = true
html.enabled = true
}
}
//Wenn Sie Gradle Build ausführen, führen Sie auch die Abdeckungsmessung in Jacoco durch
build.dependsOn jacocoTestReport
Befehl hinzugefügt, um die Ergebnisse der Abdeckungsmessung nach dem Erstellen mit Gradle an Codecov zu senden
$ CODECOV_TOKEN ist eine Umgebungsvariable, die auf das oben in Codecov angezeigte Token verweist
Der Name der Umgebungsvariablen kann geändert werden, wenn ein anderer Name der Umgebungsvariablen zulässig ist.
- script:
name: post coverage to codecov
code: |
bash <(curl -s https://codecov.io/bash) -t $CODECOV_TOKEN
Rückblickend, einschließlich der bisherigen Anhäufung.
# This references an OpenJDK container from the
# Docker Hub https://hub.docker.com/_/openjdk/
# Read more about containers on our dev center
# http://devcenter.wercker.com/docs/containers/index.html
box: openjdk:10.0.1-jdk
# defining the dev pipeline
dev:
steps:
# A step that executes `gradle bootRun` command
- script:
name: run gradle
code: |
./gradlew bootRun
# Build definition
build:
# The steps that will be executed on build
steps:
# A step that executes `gradle build` command
- script:
name: run gradle
code: |
./gradlew --full-stacktrace -q --project-cache-dir=$WERCKER_CACHE_DIR build
- script:
name: post coverage to codecov
code: |
bash <(curl -s https://codecov.io/bash) -t $CODECOV_TOKEN
Informationen zum Schwellenwert usw. finden Sie in RxJava.
Wenn Sie ein Ziel haben, setzen Sie es unter Bezugnahme auf Spezifikationen.
Wenn das Ergebnis der Abdeckungsmessung niedriger als die Ziel- und Schwellenwerte ist, wird es als NG behandelt.
codecov:
notify:
require_ci_to_pass: yes
coverage:
status:
project:
default:
target: 95%
threshold: 1%
patch:
default:
target: 95%
threshold: 1%
changes: no
Öffnen Sie Einstellungen im GutHub-Repository
Öffnen Sie Zweige
Recommended Posts