2017-11-06 3 views
2

Ich baue eine Android-Komponente in Form eines Grapple-Projekts. Um meine Komponenten-UI in mehreren Konfigurationen mit dem espresso Framework zu testen, habe ich einen TestActivity im androidTest Quellsatz, den ich instrumentieren kann.Organisieren Sie geteilten Code zwischen Android Test und Test

den Dateibaum Zur Klarstellung:

src/ 
    androidTest/ 
     java/my.package/ 
      TestActivity.kt 
      ... 
     res/layout/ 
      my_test_activitity.xml 
    test/ 
     java/my.package/ 
      MyUnitTests.kt 

Jetzt möchte ich mit robolectric für einige meiner Unit-Tests beginnen und auch meine TestActivity von dort zu testen. Interessanterweise Android Studio beschwert sich nicht, wenn ich ein Setup Robolectric in MyUnitTests.kt:

val activity = Robolectric.setupActivity(TestActivity::class.java) // no error 

aber wenn ich versuche, die Unit-Tests laufen zu lassen, ist gradle mich mit diesem Fehler vor:

e: src/test/java/my.package/MyUnitTests.kt: Unresolved reference: TestActivity 

Meine Vermutung ist, dass die test Source-Set hat keinen Zugriff auf die androidTest Source-Set, obwohl Android Studio scheint zu denken, dass es hat.

Wie kann ich das beheben (machen Klassen und Ressourcen in androidTest zugänglich von test)? Ist das überhaupt der richtige Ansatz, wenn Code zwischen Instrumentierungstests und Komponententests ausgetauscht wird, oder gibt es einen besseren Weg?

Antwort

3

ich oft um diese durch eine src/commonTest/java sourceSet Erstellen und belichten, dass sowohl die Instrumentierung Tests und Unit-Tests durch die folgende meiner gradle Datei hinzufügen:

android { 
    sourceSets { 
     String sharedTestDir = 'src/commonTest/java' 
     test { 
      java.srcDir sharedTestDir 
     } 
     androidTest { 
      java.srcDir sharedTestDir 
     } 
    } 
}