web-dev-qa-db-fra.com

Android Studio ne reconnaît pas les cours d'espresso

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:

external libraries

23
midnight

Il s’agit donc d’un bogue lié à Android Studio (je suppose). 

Référence:

  1. Problème soulevé dans les groupes adt-dev
  2. Bug actuel - # 66841

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'
    }
}
28
Kaushik Gopal

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

13
Max Ch

Espresso 2.0

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 .

Guide d'installation

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.

Autres astuces

_ {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} _

Mettez à niveau Android Studio vers la version 1.0. *

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 .

Mettre à jour la bibliothèque de support Android vers v 11+

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.

Nouvelles dépendances et espace de noms

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;

Coureur instrumentation

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

Exemple de cas de test

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 .

11
hcpl

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)

4
LateBloomer

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

3
Rostyslav Roshak

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.*;
3
Henry

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.

1
Scott Barta

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 **.

0
Karoly