J'utilise Android Studio 0.5.0
avec Gradle 1.11
. J'essaie d'installer la bibliothèque Espresso à partir de com.jakewharton.espresso: espresso: 1.1-r2 . Pour une raison quelconque, AS ne pouvait pas reconnaître les classes Espresso après la synchronisation du projet. Ainsi, chaque fois que j'essaie d'importer import static com.google.Android.apps.common.testing.ui.espresso.Espresso.onView;
à l'intérieur de fichiers de dossiers androidTest
, il le marque comme non valide.
Voici mon build.gradle:
apply plugin: 'Android'
Android {
compileSdkVersion 19
buildToolsVersion '19.0.2'
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "1.0"
testInstrumentationRunner "com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.squareup.dagger:dagger-compiler:1.2.1'
compile 'com.squareup.dagger:dagger:1.2.1'
androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') {
exclude group: 'com.squareup.dagger'
}
}
Bibliothèques externes:
Il s’agit donc d’un bogue lié à Android Studio (je suppose).
Référence:
Solution de contournement (jusqu'à ce que le bogue soit corrigé):
Ajoutez une dépendance fournie en double dans votre fichier gradle comme ceci:
dependencies {
// ...
provided 'com.jakewharton.espresso:espresso:1.1-r2'
androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') {
exclude group: 'com.squareup.dagger'
}
}
Cette question me rendait fou. Et il semble que ce soit un bogue connu dans Android Studio. Dans mon cas, le problème a été résolu une fois que j'ai modifié le type de construction de Release à Debug pour l'application parent. J'espère que cela peut être utile pour quelqu'un
Récemment, Espresso 2.0 a été publié, ce qui en fait désormais partie de la bibliothèque de support Android . C'était annoncé sur le blog de développement Android .
Avec cela, ils ont également lié un guide de configuration mis à jour . Vous y trouverez des instructions pour configurer à partir de zéro ou pour mettre à jour votre configuration d’espresso existante pour 2.0.
_ {Les modifications sont les 2 liens ci-dessus contiennent toutes les informations dont vous avez besoin. Sinon, j'ai énuméré quelques erreurs courantes ci-dessous} _
Commencez par mettre à niveau votre build Android Studio. Vous devriez pouvoir obtenir au moins 1.0 à partir des canaux de builds stables (= par défaut). Il suffit donc d’utiliser l’option de menu Android Studio > Rechercher les mises à jour ... .
Pour obtenir les dernières nouvelles, vous pouvez également aller dans Préférences, rechercher des mises à jour et changer le canal en canary channel .
Espresso était inclus dans la bibliothèque de support à partir de la version 11, vous devez donc obtenir au moins cette version. Recherchez les mises à jour à l’aide du Gestionnaire de SDK Android . La bibliothèque de support se trouve dans l’arborescence Extras en bas.
Si vous utilisez une version plus ancienne d’espresso, vous devrez mettre à jour les dépendances et l’espace de noms. Pour les nouveaux projets, ajoutez-les simplement à la dependencies
dans votre fichier build.gradle
.
dependencies {
androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.Android.support.test:testing-support-lib:0.1'
}
Et puisque l'espace de noms a changé, vous devez mettre à jour toutes les importations:
Android.support.test.espresso
Notez qu'il est plus facile d'utiliser des importations statiques. Certains importations couramment utilisées à titre d'exemple:
import static Android.support.test.espresso.Espresso.onView;
import static Android.support.test.espresso.assertion.ViewAssertions.matches;
import static Android.support.test.espresso.matcher.ViewMatchers.withId;
import static Android.support.test.espresso.matcher.ViewMatchers.withText;
import static Android.support.test.espresso.matcher.ViewMatchers.withContentDescription;
Pour les assertions, utilisez hamcrest, encore une fois un peu exemples:
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.anyOf;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.startsWith;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.hamcrest.Matchers.equalToIgnoringWhiteSpace;
Le lanceur de tests doit être configuré à la fois dans votre fichier build.gradle
dans defaultConfig et dans la configuration d'exécution utilisée pour lancer vos tests à partir d'Android Studio.
defaultConfig {
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
Et dans votre configuration d'exécution, utilisez-le en tant que coureur d'instrumentation (nom complet de la classe uniquement):
Android.support.test.runner.AndroidJUnitRunner
Et un exemple de cas de test pour finir. Notez que MainActivity
est votre activité que vous souhaitez tester. Les tests eux-mêmes sont des méthodes publiques qui commencent par test, comme testListGoesOverTheFold
dans l'exemple ci-dessous.
@LargeTest
public class HelloWorldEspressoTest extends ActivityInstrumentationTestCase2<MainActivity> {
public HelloWorldEspressoTest() {
super(MainActivity.class);
}
@Override
public void setUp() throws Exception {
super.setUp();
getActivity();
}
public void testListGoesOverTheFold() {
onView(withText("Hello world")).check(isDisplayed());
}
}
_ {Pour plus d'informations sur la rédaction des tests, visitez le guide de démarrage de l'espresso .
Six mois plus tard, le problème persiste et le bogue référencé par le répondeur d'origine a été rouvert: https://code.google.com/p/Android/issues/detail?id=66841 et a reçu une priorité plus élevée. Je n'ai pas encore réussi à faire reconnaître par Android Studio les classes d'espresso et l'utilisation de la portée "fournie" pour les dépendances n'a pas permis de résoudre le problème pour moi. (En utilisant AS 0.8.6 et Gradle 0.12.2)
selon http://tools.Android.com/tech-docs/new-build-system/user-guide , un seul type de construction est testé. Par défaut, il s'agit du type de construction debug.
Vérifiez donc que vous utilisez la variante de construction debug et reconstruisez l’application. Sur d'autres types de construction, toutes vos dépendances androidTest ne seront pas visibles.
Si vous avez besoin de tester votre type de construction actuel, vous pouvez faire quelque chose comme ceci:
Android { ... TestBuildType "staging" }
Android Studio 1.5.1 n'a pas réalisé les méthodes onView()
ou onData()
dans mon cas. Je viens de faire une importation statique de la classe Espresso et de toutes ses méthodes.
J'ai ajouté la ligne ci-dessous et tout fonctionnait parfaitement.
import static Android.support.test.espresso.Espresso.*;
Vous n'êtes pas précis sur le fichier source dans lequel l'erreur est générée, mais d'après mes tests, je pense que vous essayez d'accéder aux classes Espresso à partir de l'une de vos principales classes d'application (à l'intérieur). src/principal/Java /). Si tel est le cas, cela ne fonctionnera pas, car vous avez inclus Espresso via une dépendance androidTestCompile
, ce qui le rend accessible uniquement à vos classes de test, qui doivent être placées sous src/androidTest/Java.
J'ai essayé toutes les solutions que les gars ont devinées ci-dessus et j'ai toujours eu l'erreur de classe non trouvée.
J'ai compris ma solution, cela m'a sauvé la journée. Donc, si vous ouvrez le onglet du projet à gauche des dossiers de votre projet dans Studio et vérifiez le variantes de construction, vous pouvez voir que votre projet est défini sur unit test . Vous devez le redéfinir sur Tests d'instrumentation Android et assurez-vous que votre fichier test.Java est sous ** src\androidTest\Java **.