Come eseguire i test JUnit con Gradle?


95

Al momento ho il seguente file build.gradle :

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')
}    


Questo file build.gradle è per il mio repository qui . Tutti i miei file principali sono in src / model / e i rispettivi test sono in test / model .

Come posso aggiungere correttamente una dipendenza JUnit 4 e quindi eseguire quei test nelle cartelle di test / modello ?

Risposte:


104

Come aggiungo correttamente una dipendenza junit 4?

Supponendo che tu stia risolvendo contro un repository Maven standard (o equivalente):

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

Eseguire quei test nelle cartelle di test / modello?

Definisci il set di sorgenti di test allo stesso modo:

sourceSets {
    ...

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

Quindi invoca i test come:

./gradlew test

MODIFICA: Se invece stai usando JUnit 5, ci sono più passaggi da completare, dovresti seguire questo tutorial .


8
srcDirs = ["test/model"]è un po 'più preciso perché elimina la directory delle sorgenti di test predefinita, mentre srcDir "test/model"aggiunge un'altra directory. Lo stesso per il mainset di sorgenti.
Peter Niederwieser

47

Se imposti il ​​tuo progetto con la struttura del pacchetto gradle predefinita, ovvero:

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

quindi non sarà necessario modificare sourceSets per eseguire i test. Gradle scoprirà che le tue classi e risorse di test sono in src / test. Puoi quindi eseguire come dice Oliver sopra. Una cosa da notare: fare attenzione quando si impostano i file delle proprietà e si eseguono le classi di test sia con gradle che con l'IDE. Uso Eclipse e quando eseguo JUnit da esso, Eclipse sceglie un classpath (la directory bin) mentre gradle ne sceglie un altro (la directory build). Ciò può creare confusione se si modifica un file di risorse e non si vede la modifica riflessa durante il runtime di test.


2
Per indirizzare i file di build di Eclipse nella stessa directory di Gradle (può prevenire alcuni errori frustranti): Progetto -> Proprietà -> Percorso di build Java -> Cartella di output predefinita: sostituire "bin" con "build". Tuttavia ... nella mia esperienza questo sembra avere l'abitudine sconcertante di "scivolare indietro" al "cestino" predefinito ogni tanto inaspettatamente. Sarebbe bello sapere se esiste un modo per far sì che Eclipse utilizzi "build" per impostazione predefinita.
mike rodent

2
@ mike-rodent, per quanto ne so, è esplicitamente sconsigliato condividere lo stesso percorso di costruzione per eclipse e gradle (vedi ad esempio discuss.gradle.org/t/… )
mtraut

OK, sono corretto! ... e suppongo che non ci sia nulla da guadagnare dalla compilazione nella stessa directory. Per la maggior parte degli scopi, la funzionalità del generatore di eclipse diventa un semplice strumento di convalida: "whoops, questo non verrà compilato a causa di x, yez".
mike rodent

1
@DivDiff la struttura delle mie cartelle src è configurata nello stesso modo menzionato sopra, ma comunque quando eseguo il test gradle, non fa nulla. Non esegue affatto i miei test. Qualche idea?
Gaurav

@ Gaurav, ti ho invitato in una chat così possiamo parlarne offline.
DivDiff

15

Se hai creato il tuo progetto con Spring Initializr , tutto dovrebbe essere configurato correttamente e tutto ciò che devi fare è eseguire ...

./gradlew clean test --info
  • Rilascia --infose non vuoi vedere l'output di prova.
  • Abbandona cleanse non desideri rieseguire i test che sono già passati dall'ultima modifica.

Dipendenze richieste build.gradleper il test in Spring Boot ...

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

Per qualche motivo il test runner non te lo dice, ma produce un report HTML in formato build/reports/tests/test/index.html.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.