Lorsque vous essayez d'exécuter des tests Android Espresso, le runner junit ne parvient pas à instancier / trouver la classe que vous testez. Cela peut être résolu en mettant à jour votre fichier build.gradle, mais pourquoi est-ce nécessaire? Merci pour tout aperçu!

Par exemple, la ligne suivante créera une exception comme celle ci-dessous.

test junit:

@Rule
public ActivityTestRule<ChurchesActivity> mChurchesActivityTestRule =
        new ActivityTestRule<>(ChurchesActivity.class);

Exception générée lors de l'exécution du test:

junit.framework.AssertionFailedError: Exception dans le constructeur: toolbarHasApplicationName (java.lang.NoClassDefFoundError: es.unizar.vv.mobile.catmdedit.app.view.ChurchActivity

Ce problème est résolu en mettant à jour votre build.gradle pour exclure des groupes / modules particuliers (voir ci-dessous), mais pourquoi est-ce nécessaire?

dependencies {
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude group: 'com.android.support', module: 'appcompat'
    exclude group: 'com.android.support', module: 'support-v4'
    exclude module: 'recyclerview-v7'
}

}

Cette question fait suite à la question suivante:

Exception de tests Android dans le constructeur NoClassDefFoundError

2
dazza5000 27 déc. 2015 à 03:26

2 réponses

Meilleure réponse

C'est nécessaire car lorsque vous utilisez Gradle, vous pouvez parfois avoir des conflits de version avec des dépendances transitives (dépendances incluses par la bibliothèque que vous souhaitez utiliser) . Vous pouvez en savoir plus ici.

Ainsi, par exemple, la bibliothèque espresso-contrib peut avoir une version de la bibliothèque recyclerview-v7 différente de celle référencée dans les dépendances de votre application. Vous pouvez donc l'exclure ou indiquer spécifiquement la version de la bibliothèque que vous souhaitez utiliser avec les éléments suivants:

ext {
    supportLibraryVersion = '23.1.1'
}

configurations.all {
    resolutionStrategy.force "com.android.support:support-annotations:$supportLibraryVersion"
    resolutionStrategy.force "com.android.support:recyclerview-v7:$supportLibraryVersion"
    resolutionStrategy.force "com.android.support:support-v4:$supportLibraryVersion"
}
2
brwngrldev 27 déc. 2015 à 02:06

Semble être un bogue dans le studio Android. Il est signalé ici et censé être corrigé dans le plug-in Android Gradle 2.0 +.

0
jimmy0251 27 déc. 2015 à 04:05