2014-02-06 3 views
6

Nachdem ich die android guide on testing mit dem Android Gradle-Plugin gelesen hatte, wollte ich JUnit-Tests für meine POJOs einrichten, die nicht mit den instrumentierten Tests laufen. Die Idee war, dass Tests für Code, der nicht von Android abhängig ist, sehr schnell sein sollten (und TDD erleichtern).So richten Sie Komponententests für Android/Gradle ein

Gibt es eine Standardmethode zum Einrichten eines Quellsatzes und einer Aufgabe in build.gradle, um dies zu erreichen? Das ist die Hauptfrage, die zweite Frage ist, was ist falsch mit meinem Versuch unter ...

Ich benutze Android Studio 0.4.2 und Gradle 1.9, Experimentieren mit einem einfachen JUnit Test-Klasse in einem neuen "Test" -Ordner . Hier ist, was ich habe, so weit, aber wenn ich „gradle testPojo“ laufen bekomme ich dieses Ergebnis:

:android:assemble UP-TO-DATE 
:android:compileUnitTestJava UP-TO-DATE 
:android:processUnitTestResources UP-TO-DATE 
:android:unitTestClasses UP-TO-DATE 
:android:testPojo FAILED 

* What went wrong: 
Execution failed for task ':android:testPojo'. 
> failed to read class file 
/path/to/project/android-app/build/classes/unitTest/TestClass.class 

ich festgestellt, dass die Klasse in der Tat gibt es, also bin ich verwirrt, warum die Aufgabe nicht ist kann die Datei lesen. Hier

ist die build.gradle Datei:

... 

sourceSets { 
    unitTest { 
    java.srcDir file('src/test/java') 
    resources.srcDir file('src/test/resources') 
    } 
} 

dependencies { 
    ... 
    unitTestCompile 'junit:junit:4.11' 
} 

configurations { 
    unitTestCompile.extendsFrom instrumentTestCompile 
    unitTestRuntime.extendsFrom instrumentTestRuntime 
} 

task testPojo(type: Test, dependsOn: assemble){ 
    description = "Run pojo unit tests (located in src/test/java...)." 
    testClassesDir = sourceSets.unitTest.output.classesDir 

    android.sourceSets.main.java.srcDirs.each { dir -> 
    def buildDir = dir.getAbsolutePath().split('/') 
    buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/') 
    sourceSets.unitTest.compileClasspath += files(buildDir) 
    sourceSets.unitTest.runtimeClasspath += files(buildDir) 
    } 
    classpath = sourceSets.unitTest.runtimeClasspath 
} 

check.dependsOn testPojo 

Antwort

0

Ich würde vorschlagen, Sie robolectric zu verwenden, erklären es so:

classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+' 

Und dann gilt das Plugin:

apply plugin: 'robolectric'