2016-05-05 24 views
5

Ho modificato il mio progetto per diventare multipiattaforma.Gradle: come eseguire i test da una dipendenza del modulo?

Stato precedente: Solo un modulo (progetto) con un build.gradle. Tutti i test erano nella cartella di test e quando eseguo lo gradlew testDebug tutti i miei 500 test erano in esecuzione.

Nuovo stato: Ho un progetto principale Gradle che non fa nulla, ma che tiene 3 moduli

  • nucleo
  • androidversion
  • rasberryPiVersion

Ognuno di questi i moduli hanno il proprio file gradle, ma solo il modulo android e rasberryPi può essere costruito. Nelle loro dipendenze (nel rispettivo file build.gradle), vengono compilati rispetto al modulo "core". Così:

dependencies { 
    compile project(':clapcore') 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.google.android:android:4.1.1.4' 
} 

Tutti i miei 500 test sono ora nel nucleo. Quindi, quando eseguo lo gradlew clean assembleDebug testDebug sul modulo Android, non viene rilevato alcun test e la cartella del risultato del test è vuota.

ho cercato di eseguire il comando testDebug sul modulo di base direttamente, ma dal momento che non costruisce da solo, ricevo l'errore:

FAILURE: Build failed with an exception. 

* What went wrong: 
Task 'testDebug' not found in project ':core'. 

Quindi la mia domanda è: esiste un modo, in gradle, per dire al comando "testDebug" di eseguire tutti i test che sono nella sua dipendenza dal modulo (core)?

ho anche tentato di aggiungere un testCompile in dipendenza del modulo di Android, ma pretende molto lavoro, in questo modo:

dependencies { 
    compile project(':clapcore') 
    testCompile project(':clapcore') 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.google.android:android:4.1.1.4' 
} 

Grazie!

EDIT ho trovato che posso fare il comando gradlew build sul nucleo e sarà eseguito il test nel modulo 'core'. Ma mi piacerebbe un modo per eseguire questi test "a cascata" se è possibile.

* EDIT 2 * ho trovato che posso fare il comando gradlew buildNeeded sul modulo 'Android' e lo farà una build per il modulo Android e il nucleo. Sfortunatamente, si costruisce solo in versione! Se qualcuno può indicarmi un modo per utilizzare questa funzione, ma nel debug, sarebbe sorprendente. Ne ho bisogno nel debug perché la versione di rilascio lancia molte più attività come il cambio della versione, il commit a git, push, ecc ... Questo è solo per una build notturna, quindi deve essere in debug.

risposta

0

Dopo aver letto la documentazione del sito web Gradle, ho scoperto che la funzione molto bella buildNeeded esegue semplicemente tutti buildType e non è possibile modificare. Le uniche funzioni che ti danno la possibilità di scegliere buildType sono rispettivamente assembleDebug e assembleRelease.

Dal mio processo di rilascio (creazione di tag, aggiornamento della versione, push a git, ecc.) era in esecuzione subito dopo assembleRelease, ero bloccato perché l'esecuzione di buildNeeded in una compilazione notturna avrebbe attivato la procedura di rilascio.

Così ho modificato il file build.gradle per creare un'attività chiamata releaseVersion che dipende da zipalignRelease. Quindi, quando voglio davvero creare una versione, chiamo lo releaseVersion ma quando voglio semplicemente creare/test nella build notturna, chiamo il comando buildNeeded.

Cose da tenere a mente: i risultati dei test si troveranno in ciascuna cartella "build" di ciascun modulo. Fare attenzione a pulire tutti i moduli se si utilizza CI.