web-dev-qa-db-fra.com

Classe introuvable, suite de tests vide dans androidTest sous Android Studio 3.0.1, Room, Kotlin

J'ai un problème avec mon AndroidTest.

Voici ma configuration en grade:

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'
}

Et voici le test (presque rien ici):

@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()
}


}

Quand j'essaie de faire le test, j'obtiens ceci:

Le processus est terminé avec le code de sortie 1 Classe non trouvée: "com.blabla.shoppinglistapp.ShoppingListDaoTest" Suite de test vide.

Et ça ne commence pas

METTRE À JOUR

J'ai remarqué une très mauvaise chose. Lorsque j'ai lancé un nouveau projet dans Android Studio et que j'essaie d'exécuter AndroidTest par défaut, une erreur s'est produite:

Erreur: exception: Java.util.concurrent.ExecutionException: exception Java.util.concurrent.ExecutionException: com.Android.tools.aapt2.Aapt2Exception: erreur AAPT2: vérifiez les journaux pour plus de détails.

La solution consiste à ajouter cette ligne à gradle.properties:

Android.enableAapt2 = false

C’est ce que j’ai déjà fait dans mon projet initial (j’ai aussi rencontré cette erreur) . Malheureusement, après cela, il me donne l’erreur de ma question . C’est donc vraiment la question de savoir comment pour résoudre l'isse avec l'Aapt2 pour que cela fonctionne .. Voir aussi ici: Erreur AAPT2: consultez les journaux pour plus de détails, après avoir contourné le androidTest ne fonctionne pas

Une idée? 

14
K.Os

Moi aussi j'ai eu le même problème. Chaque fois que j'essayais d'exécuter le test individuel ou la classe de test, je continuais à obtenir l'erreur "Suite de test vide". Il semble que ce soit un bug dans Android Studio.

Au lieu de cela, cliquez avec le bouton droit sur le package androidTest et cliquez sur "Exécuter les tests dans ...". C’est la seule façon pour moi de le faire fonctionner.

Courtesy: Les gars de codelab

METTRE À JOUR:

Ceci est corrigé dans la version Android Studio 3.1. Même le gradlew connectedDebugAndroidTestissue est maintenant corrigé.

13
Henry

J'avais le même problème. Dans mon cas, le problème résolu était le déplacement de ma classe de test (classe DaoTest) vers le même package que le script par défaut ExampleInstrumentedTest créé par Android Studio.

J'ai eu cette structure de projet avant:

  • src
    • androidTest
      • Java
        • [mon package d'application]
          • ExampleInstrumentedTest
          • itemList.dataSource
            • DaoTest

Et changé pour être:

  • src
    • androidTest
      • Java
        • [mon package d'application]
          • ExampleInstrumentedTest
          • DaoTest

Après cela, j'ai pu exécuter tous les tests de la classe en même temps sans aucun problème.

0
Thiago Saraiva