wake-up-neo.com

Klasse nicht gefunden, Leere Testsuite in AndroidTest mit Android Studio 3.0.1, Room, Kotlin

Ich habe ein Problem mit meinem Android-Test.

Hier ist mein Setup in Gradle:

apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
apply plugin: 'kotlin-kapt'

Android {
compileSdkVersion 26
defaultConfig {
    applicationId "com.blabla.shoppinglistapp"
    minSdkVersion 17
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    }
 }
}

ext.daggerVersion = '2.11'
ext.roomVersion = '1.0.0'
ext.mockitoVersion = '2.11.0'

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.Android.support:appcompat-v7:26.1.0'
implementation 'com.Android.support.constraint:constraint-layout:1.0.2'
implementation 'com.Android.support:design:26.1.0'
implementation 'com.Android.support:recyclerview-v7:26.1.0'

testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-Android:2.8.47'

androidTestImplementation 'com.Android.support.test:runner:1.0.1'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.1'

// ViewModel and LiveData
implementation "Android.Arch.lifecycle:extensions:1.0.0"
annotationProcessor "Android.Arch.lifecycle:compiler:1.0.0"

// RxJava
implementation 'io.reactivex.rxjava2:rxjava:2.1.5'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'

// Room
implementation "Android.Arch.persistence.room:runtime:$roomVersion"
implementation "Android.Arch.persistence.room:rxjava2:$roomVersion"
kapt "Android.Arch.persistence.room:compiler:$roomVersion"
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.2.10"
androidTestImplementation "Android.Arch.persistence.room:testing:$roomVersion"

// Gson
implementation 'com.google.code.gson:gson:2.8.2'
}

Und hier ist der Test (fast nichts hier):

@RunWith(AndroidJUnit4::class)
class ShoppingListDaoTest {
@Test
fun useAppContext() {
    // Context of the app under test.
    val appContext = InstrumentationRegistry.getTargetContext()
    assertEquals("com.blabla.shoppinglistapp", appContext.packageName)
}

private lateinit var database: ShoppingListDatabase

@Before
fun initDb() {
    // using an in-memory database because the information stored here disappears after test
    database = Room.inMemoryDatabaseBuilder(InstrumentationRegistry.getContext(),
            ShoppingListDatabase::class.Java)
            // allowing main thread queries, just for testing
            .allowMainThreadQueries()
            .build()
}

@After
fun closeDb() {
    database.close()
}


@Test fun testGetActiveShoppingListWhenNoActiveShoppingListInserted() {
    database.shoppingListDao().getActiveShoppingLists()
            .test()
            .assertNoValues()
}


}

Wenn ich versuche, den Test auszuführen, bekomme ich Folgendes:

Der Vorgang wurde mit dem Exitcode 1 .__ abgeschlossen. Klasse nicht gefunden: "com.blabla.shoppinglistapp.ShoppingListDaoTest" Leere Testsuite.

Und es fängt nicht an

UPDATE

Ich habe eine wirklich schlimme Sache bemerkt ... Wenn ich ein neues Projekt in Android Studio gestartet habe und versuche, den Standard-Android-Test auszuführen, wird mir ein bekannter Fehler angezeigt:

Fehler: Gradle: Java.util.concurrent.ExecutionException: Java.util.concurrent.ExecutionException: com.Android.tools.aapt2.Aapt2Exception: AAPT2-Fehler: Überprüfen Sie die Protokolle auf Details

Der Workround dafür besteht darin, diese Zeile zu gradle.properties hinzuzufügen:

Android.enableAapt2 = false

Dies sind die Schritte, die ich zuvor in meinem ursprünglichen Projekt ausgeführt habe (ich bin auch auf diesen Fehler gestoßen) .. Leider gibt es mir danach den Fehler aus meiner Frage ... Also ist es wirklich die Frage, wie um die isse mit dem aapt2 zu lösen, damit dies funktioniert .. __ Siehe auch hier: AAPT2-Fehler: Logs auf Details überprüfen, nach dem Workround funktioniert der androidTest nicht

Irgendeine Idee? 

14
K.Os

Ich hatte auch das gleiche Problem. Bei jedem Versuch, die einzelnen Test- oder Testklassen auszuführen, wurde der Fehler "Empty Test Suite" angezeigt. Es scheint, dass dies ein Fehler in Android Studio ist.

Klicken Sie stattdessen mit der rechten Maustaste auf das Paket androidTest und klicken Sie auf "Tests ausführen in ...". Nur so kann ich es schaffen.

Höflichkeit: Die Codelab-Jungs

UPDATE:

Dies ist in der Android Studio 3.1-Version behoben. Sogar der gradlew connectedDebugAndroidTestissue ist jetzt behoben.

13
Henry

Ich hatte das gleiche Problem. In meinem Fall löste das Problem das Verschieben meiner Testklasse (DaoTest-Klasse) in das gleiche Paket wie das von Android Studio erstellte StandardbeispielInstrumentedTest.

Ich hatte diese Projektstruktur vorher:

  • src
    • androidTest
      • Java
        • [Mein App-Paket]
          • ExampleInstrumentedTest
          • itemList.dataSource
            • DaoTest

Und geändert zu sein:

  • src
    • androidTest
      • Java
        • [Mein App-Paket]
          • ExampleInstrumentedTest
          • DaoTest

Danach konnte ich alle Tests in der Klasse ohne Probleme ausführen.

0
Thiago Saraiva