2013-12-20 6 views
47

Zur Zeit habe ich die folgende build.gradle Datei:Wie man JUnit Tests mit Gradle durchführt?

apply plugin: 'java' 

sourceSets { 
    main { 
     java { 
      srcDir 'src/model' 
     } 
    } 
} 

dependencies { 
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar') 
    runtime fileTree(dir: 'libs', include: '*.jar') 
}  


Diese build.gradle Datei für meinen Repository ist here. Alle meine Hauptdateien sind in src/model/ und ihre jeweiligen Tests sind in Test/Modell.

Wie füge ich eine JUnit 4 Abhängigkeit richtig und dann diese Tests in den Ordnern von Tests/Modell laufen?

Antwort

54

Wie kann ich eine Junit 4-Abhängigkeit korrekt hinzufügen?

Angenommen, Sie sind die Lösung gegen einen Standard Maven (oder gleichwertig) Repo:

dependencies { 
    ... 
    testCompile "junit:junit:4.11" // Or whatever version 
} 

Führen diese Prüfungen in den Ordnern von Tests/Modell?

Sie definieren Ihre Testquelle auf die gleiche Weise eingestellt:

sourceSets { 
    ... 

    test { 
     java { 
      srcDirs = ["test/model"] // Note @Peter's comment below 
     } 
    } 
} 

Dann rufen Sie die Tests wie:

./gradlew test 

EDIT: Wenn Sie 5 JUnit stattdessen verwenden, gibt es mehr Schritte Um zu vervollständigen, sollten Sie this tutorial folgen.

+7

'srcDirs = [" test/model "]' ist etwas präziser, da es das Standardverzeichnis der Testquellen entfernt, während 'srcDir" test/model "' ein anderes Verzeichnis hinzufügt. Gleiches gilt für den Hauptquellensatz. –

31

Wenn Sie Ihr Projekt mit dem Standard gradle Paketstruktur einrichten, d.h .:

src/main/java 
src/main/resources 
src/test/java 
src/test/resources 

dann werden Sie nicht sourceSets ändern müssen, um Ihre Tests auszuführen. Gradle wird herausfinden, dass Ihre Testklassen und Ressourcen in src/test sind. Sie können dann laufen, wie Oliver oben sagt. Eine Sache zu beachten: Seien Sie vorsichtig, wenn Sie Eigenschaftendateien setzen und Ihre Testklassen sowohl mit Gradle als auch mit Ihrer IDE ausführen. Ich benutze Eclipse, und wenn ich JUnit damit starte, wählt Eclipse einen Klassenpfad (das bin-Verzeichnis), während grddle einen anderen (das Build-Verzeichnis) wählt. Dies kann zu Verwirrung führen, wenn Sie eine Ressourcendatei bearbeiten und Ihre Änderung nicht zur Laufzeit des Tests angezeigt wird.

+2

Um Eclipse-Build-Dateien auf dasselbe Verzeichnis wie Gradle zu richten (kann ein paar frustrierende Fehler verhindern): Projekt -> Eigenschaften -> Java-Build-Pfad -> Standard-Ausgabeordner: Ersetze "bin" durch "build". Jedoch ... nach meiner Erfahrung scheint dies die beunruhigende Angewohnheit zu haben, immer wieder unerwartet in die Standard-Bin zu "rutschen". Wäre schön zu wissen, ob Eclipse standardmäßig "Build" verwenden kann. –

+2

@Mike-Nagetier Soweit ich weiß, wird ausdrücklich davon abgeraten, den gleichen Build-Pfad für Eclipse und Gradle zu verwenden (siehe zB https://discuss.gradle.org/t/problems-with-eclipse-executing-junit-tests) -compiled-by-gradle/2338) – mtraut

+0

OK, ich stehe richtig! ... und ich nehme an, es gibt nichts, was man daraus gewinnen könnte, wenn man sich in dasselbe Verzeichnis einträgt. Für die meisten Zwecke wird die Eclipse-Builder-Funktionalität zu einem reinen Validierungswerkzeug: "Whoops, das wird wegen x, y und z nicht kompilieren". –

0

Wenn Sie Ihr Projekt mit Spring Initializr erstellt, sollte alles richtig konfiguriert sein und alles, was Sie tun müssen, ist laufen ...

./gradlew clean test --info 
  • Tropfen --info wenn Sie wollen Testausgang nicht sehen.
  • Löschen Sie clean, wenn Sie die Tests, die seit der letzten Änderung bereits bestanden wurden, nicht erneut ausführen möchten.

Abhängigkeiten in build.gradle für die Prüfung im Frühjahr Stiefel erforderlich ...

dependencies { 
    compile('org.springframework.boot:spring-boot-starter') 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

Aus irgendeinem Grund die Test-Runner diese Ihnen nicht sagen, aber es erzeugt einen HTML-Bericht in build/reports/tests/test/index.html.