2016-12-05 1 views
2

Ich habe ein Problem mit Kotlin Espresso Tests. Ich habe Kotlin-Android Gradle Plugin im Build-Skript des Moduls angewendet, und die Tests laufen ohne Probleme in Android Studio (die Testklasse ist kommentiert und von AndroidJUnit4 Runner ausgeführt), aber die Gradle Task "AssembledDebugAndroidTest" aus Terminal fehlschlägt meine Hauptklassen zu finden . und Pakete (Klassen in den Tests verwendet) Es wirft einen Unresolved Reference FehlerAndroid Espressotests (in Kotlin geschrieben) kann die Hauptklassen und Pakete nicht sehen

Hier ist der sourceSets Abschnitt des Build-Skript.

sourceSets { 

    androidTest { 
     java.srcDir 'src/sharedTestUtils/java' 
     java.srcDir 'src/acceptanceTests/java' 
     java.srcDir 'src/functionalTests/java' 
     java.srcDir 'src/sharedTestUtils/kotlin' 
     java.srcDir 'src/acceptanceTests/kotlin' 
     java.srcDir 'src/functionalTests/kotlin' 
    } 

    acceptanceTests { 
     java.srcDir 'src/sharedTestUtils/java' 
     java.srcDir 'src/sharedTestUtils/kotlin' 
    } 

    // source sets for Kotlin 
    // main.java.srcDirs += 'src/main/kotlin' 
    test.java.srcDirs += 'src/test/kotlin' 

} 

und Test Abhängigkeiten in dem Modul ein:

apply plugin: 'kotlin-android' 

dependencies { 
    androidTestCompile deps.kotlin 
    androidTestCompile deps.kotlinTest 
    androidTestCompile deps.kotlinTestJunit 
} 

Project Build-Skript:

ext.deps = [ 
    kotlin    : "org.jetbrains.kotlin:kotlin-stdlib:$ver.kotlin", 
    kotlinTest   : "org.jetbrains.kotlin:kotlin-test:$ver.kotlin", 
    kotlinTestJunit  : "org.jetbrains.kotlin:kotlin-test-junit:$ver.kotlin" 
] 

Ich verwende Version 1.0.5-2 von Kotlin.

Wir haben einen benutzerdefinierten Test-Runner als testInstrumentationRunner, der einige Leerlauf Ressourcen und einige Aktivität Hook zum Entsperren des Geräts Bildschirm und Erwerb der Wake-Sperre registriert, und nutzt TestButler zum Deaktivieren von Animationen und Stabilisierungstests. Die Tests sind jedoch mit Espresso jUnit 4 runner (@RunWith(AndroidJUnit4::class)) versehen. Aber die Tatsache, dass Android Studio die Tests problemlos ausführt, ist verwirrend.

Antwort

1

Die Kompilierungsaufgabe Kotlin-Test muss nach der entsprechenden Assemble-Task ausgeführt werden, damit die Klassenreferenzen ordnungsgemäß funktionieren.

Stellen Sie bei assembleDebugAndroidTest sicher, dass assembleDebug zuerst ausgeführt wird.

./gradlew assembleDebugAndroidTest -m 

Wenn assembleDebug ist nicht in der richtigen Reihenfolge:

in der Befehlszeile kann die Reihenfolge der Aufgaben so schnell mit gradle „dry run“ wie überprüft werden. Sie können die Reihenfolge korrigieren, indem Sie Ihrer Build-Datei Folgendes hinzufügen:

afterEvaluate { 
    compileDebugAndroidTestKotlin.dependsOn assembleDebug 
} 
Verwandte Themen