Protokollierung beim Testen durch Gradle

78

Während des Testens scheint Gradle stdout / stderr umzuleiten project_dir/build/reports/tests/index.html. Gibt es eine Möglichkeit, diese Umleitung zu vermeiden und stattdessen Dinge auf die Konsole zu drucken?

Zusätzliche Information:

  • Es ist ein Scala 2.9.1-Projekt.
  • Ich benutze slf4s für die Protokollierung.
fehlender Faktor
quelle

Antworten:

95
apply plugin : 'java'

test {
    testLogging.showStandardStreams = true
}

http://gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.Test.html

Dies erfordert eine aktuelle Gradle-Version. Ich gehe davon aus, dass die Scala-Tests unter der Java-Testaufgabe ausgeführt werden.

Robe
quelle
Hoppla, beim Testen sieht es so aus, als ob es nicht so wäre. Dies erzeugt jedoch eine Ausgabe für mich: pastebin.com/PX8e1EKv edit: Ändere den Druck in einen Druck, da ich denke, dass das Ereignis die Newline erfasst
Roby
Vielen Dank. Ich werde das auch versuchen. Ich habe auch einige Protokollanweisungen in Quelldateien. Wie lasse ich sie auf der Konsole drucken?
fehlender Faktor
Dies hängt von der Protokollierungsimplementierung ab. slf4s verwendet möglicherweise standardmäßig einen NOP-Logger und verwirft Ihre Protokollanweisung. Haben Sie ein Logger-Implementierungsglas im Testklassenpfad? Wenn slf4j-simple-1.6.4.jar vorhanden ist, werden INFO und höher in STDERR protokolliert. Wenn das nicht ausreicht, würde ich ein Logback-JAR hinzufügen und eine logback-test.xml einrichten, um Protokolle an die Konsole anzuhängen.
Roby
Arbeitete für mich mit Frühling / JUnit
Dmitry
Es "funktioniert möglicherweise nicht", weil die Testaufgabe als aktuell angesehen wird und nicht ausgeführt wird, sodass Sie keine Ausgabe sehen. Sie können entweder innerhalb des Blocks ( ) tun $ gradle clean testoder verwenden . Einzelheiten finden Sie in den Dokumenten . outputs.upToDateWhen {false}testLoggingtest { testLogging { outputs...
Johnny Baloney
26

Ich benutze auch ( testLogging.exceptionFormat = 'full'):

test {
    testLogging.showStandardStreams = true
    testLogging.exceptionFormat = 'full'
}

Welches ist gut, um mehr von Stacktrace zu sehen

Zu Kra
quelle
1
Die exceptionFormatEinstellung hat bei mir funktioniert, showStandardStreamshatte keine Wirkung!
Shakeel
18

Als @roby antwortete:

Hinzufügen des folgenden Codes zu Ihrem build.gradle

apply plugin : 'java'

test {
    testLogging.showStandardStreams = true
}

Wichtig!

Sie müssen den Gradle-Test ausführen oder mit einem hinzugefügten cleanBefehl erstellen .

./gradlew clean test

or

./gradlew clean build

Hoffe das funktioniert.

nmfzone
quelle
3
Können Sie erklären, warum "sauber" benötigt wird?
Michael Kanis
2
@ MichaelKanis, weil Sie die Gradle-Konfiguration geändert haben. Soweit ich weiß, wird die Gradle-Konfiguration zwischengespeichert.
nmfzone
1
@nmfzone bedeutet, dass Sie einen sauberen Test einmal ausführen müssen, um den Cache zu aktualisieren. In meinem Szenario muss ich jedoch jedes Mal den Befehl clean ausführen, um das Testergebnis auf der Konsole anzuzeigen. Auch wenn in den folgenden Läufen keine Änderungen an der Gradle-Konfiguration vorgenommen werden.
Weishi Zeng
@WeishiZeng Sind Sie sicher, dass Tests einfach nicht ausgeführt werden, weil sich ihre Eingaben nicht geändert haben? Wenn Sie andere Testeingaben als Java-Quelldateien haben, sollten Sie diese als Task.inputs registrieren, damit gradle weiß, wann Sie Tests erneut ausführen müssen oder nicht.
Ajax
17

Für Android Gradle-Dateien

Wenn Sie sich in einer Android-Gradle-Datei befinden (wenn sie apply plugin: 'com.android.application'sich oben in Ihrer build.gradle-Datei befindet)

Fügen Sie dies dann in build.gradle ein

// Test Logging
tasks.withType(Test) {
    testLogging {
        events "standardOut", "started", "passed", "skipped", "failed"
    }
}

Für reguläre Gradle-Dateien

Fügen Sie dies in build.gradle ein

// Test Logging
test {
    testLogging {
        showStandardStreams = true
    }
}
Joshuakcockrell
quelle
10
test {
    testLogging.showStandardStreams = true
}

und

test {
    testLogging {
        showStandardStreams = true
    }
}

funktioniert auch.

Zhouji
quelle
9

Nur um hinzuzufügen, die:

showStandardStreams = true

ist eine Abkürzung für:

events = ["standard_out", "standard_error"]

Es ist wichtig, dies zu berücksichtigen, wenn Sie beide Einträge wie folgt mischen:

test {
    testLogging {
        showStandardStreams = true
        events = ["passed", "failed", "skipped"]
    }
}

führt zu keinem Standard, während die umgekehrte Reihenfolge:

test {
    testLogging {
        events = ["passed", "failed", "skipped"]
        showStandardStreams = true
    }
}

fügt die stdout-Einträge zur Liste hinzu, damit stdout funktioniert .

Einzelheiten finden Sie in der Quelle .

Johnny Baloney
quelle
Wenn showStandardStreamsdie Bestellung an zweiter Stelle steht, werden die Standard-Streams an die Ereignisliste angehängt , um dies noch einmal zu überprüfen ? Es scheint so, aber nur eine doppelte Überprüfung.
George Pantazes
2

Wenn Sie Kotlin DSL mit build.gradle.ktsder Syntax verwenden, ist das etwas anders.

Stellen Sie sicher, dass Sie den Junit in Ihren Abhängigkeiten haben:

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.4.2")
    testImplementation("org.junit.jupiter:junit-jupiter-api")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
}

Dann müssen Sie Ihrer Testaufgabe hinzufügen:

import org.gradle.api.tasks.testing.logging.TestExceptionFormat

tasks.test {
    useJUnitPlatform()
    testLogging {
        showStandardStreams = true
        exceptionFormat = TestExceptionFormat.FULL
        events("skipped", "failed")
    }
}

Anschließend können Sie die Einstellungen an Ihre Bedürfnisse anpassen.

Sylhare
quelle
0

In meinem Fall habe ich mit Java und Spring-Boot-Starter-Test gearbeitet.

Ich hatte das gleiche Problem und das Problem war, dass ich keine Testmaschine hatte.

Also füge ich eine zu den Abhängigkeiten von build.gradle hinzu und es hat Arbeit.

testCompile-Gruppe: 'org.junit.jupiter', Name: 'junit-jupiter-api', Version: dependencyVersion.junit5 testCompile-Gruppe: 'org.junit.jupiter', Name: 'junit-jupiter-engine', Version: dependencyVersion .junit5

Iker Aguayo
quelle
0
./gradlew --info clean build test

Mit --stacktraceOption ausführen, um den Stack-Trace abzurufen. Führen Sie mit --infooder die --debugOption aus, um mehr Protokollausgabe zu erhalten. Laufen Sie mit --scan, um vollständige Einblicke zu erhalten.

Gayan Weerakutti
quelle