Sto utilizzando il test awesome plugin from Jake Wharton per le unità Android. Il mio obiettivo di prendere la briga di far funzionare questi test unitari è la velocità (feedback rapido TDD e tutto).Eseguire un singolo test Android (unità) da gradle senza caricare altre dipendenze di progetto
Sono riuscito a configurare correttamente e hanno alcune prove del campione in esecuzione come segue:
./gradlew test
Ogni volta che esegue il test se ho notato il seguente output:
Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0
The Test.testReportDir property has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the Test.getReports().getHtml().getDestination() property instead.
The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead.
:mySampleApp:preBuild UP-TO-DATE
:mySampleApp:preDebugBuild UP-TO-DATE
:mySampleApp:preReleaseBuild UP-TO-DATE
:libraries:facebook:compileLint
:libraries:facebook:copyReleaseLint UP-TO-DATE
:libraries:facebook:mergeReleaseProguardFiles UP-TO-DATE
:libraries:facebook:packageReleaseAidl UP-TO-DATE
:libraries:facebook:preBuild UP-TO-DATE
:libraries:facebook:preReleaseBuild UP-TO-DATE
:libraries:facebook:prepareReleaseDependencies
:libraries:facebook:compileReleaseAidl UP-TO-DATE
:libraries:facebook:compileReleaseRenderscript UP-TO-DATE
:libraries:facebook:generateReleaseBuildConfig UP-TO-DATE
:libraries:facebook:mergeReleaseAssets UP-TO-DATE
:libraries:facebook:mergeReleaseResources UP-TO-DATE
:libraries:facebook:processReleaseManifest UP-TO-DATE
:libraries:facebook:processReleaseResources UP-TO-DATE
:libraries:facebook:generateReleaseSources UP-TO-DATE
:libraries:facebook:compileRelease UP-TO-DATE
:libraries:facebook:processReleaseJavaRes UP-TO-DATE
:libraries:facebook:packageReleaseJar UP-TO-DATE
:libraries:facebook:packageReleaseLocalJar UP-TO-DATE
:libraries:facebook:packageReleaseRenderscript UP-TO-DATE
:libraries:facebook:packageReleaseResources UP-TO-DATE
:libraries:facebook:bundleRelease UP-TO-DATE
:mySampleApp:prepareComAndroidSupportAppcompatV71800Library UP-TO-DATE
:mySampleApp:preparemySampleAppandroidLibrariesFacebookUnspecifiedLibrary UP-TO-DATE
:mySampleApp:prepareDebugDependencies
:mySampleApp:compileDebugAidl UP-TO-DATE
:mySampleApp:compileDebugRenderscript UP-TO-DATE
:mySampleApp:generateDebugBuildConfig UP-TO-DATE
:mySampleApp:mergeDebugAssets UP-TO-DATE
:mySampleApp:mergeDebugResources UP-TO-DATE
:mySampleApp:processDebugManifest UP-TO-DATE
:mySampleApp:processDebugResources UP-TO-DATE
:mySampleApp:generateDebugSources UP-TO-DATE
Gradle sembra caricare TUTTE le dipendenze per il mio progetto.
Il mio test di esempio è la seguente:
package com.mycompany.mysampleapp;
import org.junit.Test;
import static org.fest.assertions.api.Assertions.assertThat;
public class AdditionOperationsTest {
@Test public void testModulus() {
assertThat(1).isEqualTo(1);
}
}
Questo test dovrebbe effettivamente prendere una frazione di secondo per l'esecuzione. La mia comprensione è che tutto il precaricamento delle dipendenze del progetto sta impantanando.
Nei giorni buoni, vorrei essere sicuro di avere quello che mi serve nel CLASSPATH e proprio eseguire qualcosa di simile:
javac src/test/java/main/java/com/micromobs/pkk/AdditionOperationsTest.java
java org.junit.runner.JUnitCore com.micromobs.pkk.AdditionOperationsTest
Considerando che questo è un progetto Android con Gradle, sto assumendo mi sarebbe fare qualcosa di leggermente diverso come creare compiti specifici nel file gradle build, che include solo i miei file di test per il mio progetto di esempio, e quindi eseguire un comando gradle ./gradlew taskName?
Domanda: E 'possibile eseguire il singolo test "AdditionOperationsTest" nel contesto del mio progetto (com.mycompany.mysampleapp) da solo in modo che non carica le dipendenze di progetto esterni
Ecco come la mia configurazione file attualmente assomigliano:
# settings.gradle
include ':libraries:gradle-android-test-plugin'
include ':libraries:facebook', ':mysampleapp'
# build.gradle
...
apply plugin: 'android-test'
dependencies {
testCompile 'junit:junit:4.10'
testCompile 'org.robolectric:robolectric:2.1.+'
testCompile 'com.squareup:fest-android:1.0.+'
}
# location of my test files:
androidproj/mysampleapp/src/test/java/main/com/mycompany/mysampleapp/AdditionOperationsTest.java
Sto provando a risolvere lo stesso problema. Penso che la cosa da fare sia avere un progetto multi-modulo in modo che i test esistano in un modulo separato, ma spero che non sia necessario. – Turnsole
Sì, davvero non voglio rompere i miei test in moduli diversi. Sento che vorrei perdere la bontà di aver spostato il nostro intero progetto al gradle. Spero che questo sia solo un parametro stupido che devo aggiungere o un compito che devo dichiarare, che ignorerà le dipendenze esterne del progetto ed eseguirà il test esatto a cui punto e solo le dipendenze che richiede. –