Wie führe ich JUnit-Tests mit Gradle durch?

95

Derzeit habe ich die folgende build.gradle- Datei:

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 ist für mein Repository hier . Alle meine Hauptdateien befinden sich in src / model / und ihre jeweiligen Tests befinden sich in test / model .

Wie füge ich eine JUnit 4- Abhängigkeit korrekt hinzu und führe diese Tests dann in den Ordnern von tests / model aus ?

Wang-Zhao-Liu QM
quelle

Antworten:

104

Wie füge ich eine Junit 4-Abhängigkeit korrekt hinzu?

Angenommen, Sie lösen sich gegen ein Standard-Maven-Repo (oder ein gleichwertiges Repo) auf:

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

Führen Sie diese Tests in den Ordnern von tests / model aus?

Sie definieren Ihren Testquellensatz auf folgende Weise:

sourceSets {
    ...

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

Rufen Sie dann die Tests auf als:

./gradlew test

BEARBEITEN: Wenn Sie stattdessen JUnit 5 verwenden, müssen Sie weitere Schritte ausführen . Befolgen Sie dieses Lernprogramm .

Oliver Charlesworth
quelle
7
srcDirs = ["test/model"]ist etwas genauer, da das Standardverzeichnis für Testquellen entfernt wird, während ein srcDir "test/model"weiteres Verzeichnis hinzugefügt wird. Gleiches gilt für den mainQuellensatz.
Peter Niederwieser
47

Wenn Sie Ihr Projekt mit der Standard-Gradle-Paketstruktur einrichten, dh:

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

Dann müssen Sie sourceSets nicht ändern, um Ihre Tests auszuführen. Gradle wird herausfinden, dass sich Ihre Testklassen und Ressourcen in src / test befinden. Sie können dann laufen, wie Oliver oben sagt. Beachten Sie Folgendes: Seien Sie vorsichtig, wenn Sie Eigenschaftendateien festlegen und Ihre Testklassen sowohl mit gradle als auch mit Ihrer IDE ausführen. Ich verwende Eclipse und wenn JUnit darauf ausgeführt wird, wählt Eclipse einen Klassenpfad (das bin-Verzeichnis), während gradle einen anderen (das Build-Verzeichnis) auswählt. Dies kann zu Verwirrung führen, wenn Sie eine Ressourcendatei bearbeiten und Ihre Änderung zur Testlaufzeit nicht angezeigt wird.

DivDiff
quelle
2
So leiten Sie Eclipse-Builddateien in dasselbe Verzeichnis wie Gradle (kann einige frustrierende Fehler verhindern): Projekt -> Eigenschaften -> Java-Buildpfad -> Standardausgabeordner: Ersetzen Sie "bin" durch "build". Meiner Erfahrung nach scheint dies jedoch die beunruhigende Angewohnheit zu haben, von Zeit zu Zeit unerwartet in den Standard-Bin zurückzukehren. Es wäre schön zu wissen, ob es eine Möglichkeit gibt, Eclipse dazu zu bringen, standardmäßig "build" zu verwenden.
Mike Nagetier
2
@ Mike-Nagetier Soweit ich weiß, wird ausdrücklich davon abgeraten, den gleichen Build-Pfad für Eclipse und Gradle zu verwenden (siehe z. B. Diskussion.gradle.org/t/… )
mtraut
OK, ich stehe korrigiert! ... und ich nehme an, es gibt nichts zu gewinnen, wenn man in dasselbe Verzeichnis kompiliert. Für die meisten Zwecke wird die Eclipse Builder-Funktionalität zu einem bloßen Validierungswerkzeug: "Hoppla, dies wird aufgrund von x, y und z nicht kompiliert."
Mike Nagetier
1
@DivDiff Meine src-Ordnerstruktur wird auf die oben erwähnte Weise eingerichtet, aber wenn ich einen Gradle-Test mache, macht sie nichts. Meine Tests werden überhaupt nicht ausgeführt. Irgendeine Idee?
Gaurav
@Gaurav, ich habe dich in einen Chatroom eingeladen, damit wir offline darüber sprechen können.
DivDiff
15

Wenn Sie Ihr Projekt mit Spring Initializr erstellt haben , sollte alles korrekt konfiguriert sein und Sie müssen nur ...

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

build.gradleZum Testen in Spring Boot erforderliche Abhängigkeiten ...

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

Aus irgendeinem Grund sagt Ihnen der Testläufer dies nicht, aber er erstellt einen HTML-Bericht in build/reports/tests/test/index.html.

Brent Bradburn
quelle