web-dev-qa-db-fra.com

Android Erreur de test de Studio Espresso: Suite de tests vide

Je continue de rencontrer l'erreur suivante lorsque j'essaie d'exécuter mes tests dans Android Studio: l'exécution du test a échoué: impossible de trouver les informations d'instrumentation pour: ComponentInfo {.test/Android.support.test.runner. AndroidJUnitRunner}

Ma classe de test se trouve dans le répertoire androidTest/Java et a un constructeur. Mon build.gradle est correct aussi. Toute aide est appréciée.

Classe de test

@RunWith(AndroidJUnit4.class)
@LargeTest
public class AndroidUITests extends ActivityInstrumentationTestCase2<UserActivity>{

    private UserActivity userActivity;

    public AndroidUITests() {
        super(UserActivity.class);
    }


    @Before
    public void setUp() throws Exception {
        super.setUp();
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        userActivity = getActivity();
    }

    @Test
    public void testPhoneIconIsDisplayed() {
        // When the phone_icon view is available,
        // check that it is displayed.
        onView(ViewMatchers.withId(R.id.groupCreate)).perform(click())
                .check(matches(withText("Enter a name")));
    }
}

app/build.gradle:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        testInstrumentationRunner
        "Android.support.test.runner.AndroidJUnitRunner"
    }

    packagingOptions {
        exclude 'LICENSE.txt'
    }
}

dependencies {
    androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.Android.support.test:testing-support-lib:0.1'
}
16
Isaac

Vous devez mettre à jour le test "Modifier la configuration" et inclure AndroidJUnitRunner comme runner d'instrumentation.

enter image description here

J'ai trouvé la solution dans cette vidéo: https://youtu.be/TGU0B4qRlHY?t=9m36s

Mise à jour

Ajout de ce que suggère @loeschg: assurez-vous de vérifier les journaux de logcat pour vous assurer que quelque chose ne cause pas de problèmes (crash) avant même que le test ne soit exécuté. Un code incorrect dans le bloc @BeforeClass pourrait entraîner le message "Empty Test Suite" dans Android Studio malgré le bon paramétrage du programme de test).

25
Juan Saravia

Bien que la question soit déjà répondue, elle a pensé que cela valait la peine d'être publié pour les futurs visiteurs.

Assurez-vous que vous vérifiez les journaux logcat pour vous assurer que quelque chose ne cause pas de problèmes (crash) avant même que le test ne soit exécuté. J'avais un mauvais code dans mon @BeforeClass bloc qui a généré le message "Empty Test Suite" dans Android Studio malgré avoir correctement configuré le lanceur de test.

27
loeschg

Si vous obtenez un tel message d'erreur:

Class not found: "com.example.product.package.name.SomeSpecificTest" Empty test suite.

Vous devez vous assurer que votre test Espresso est ajouté sous Android Instrumented Tests section dans Run/Debug Configurations.

Il semble que Android Studio 3.1.3 l'ajoute parfois incorrectement à Android JUnit section à la place.

Assurez-vous que cela ressemble à ceci: Run/Debug Configurations with Android Instrumented Tests and Android JUnit

De plus, il convient de mentionner que j'ai remarqué que ce problème se produit pour moi alors qu'une variante de construction non Debug est sélectionnée.

7
ViliusK

Si quelqu'un s'embête encore avec cela en 2018, voici la configuration de travail:

build.gradle (obligatoire):

<...snip...>

Android {
    defaultConfig {
        <...snip...>
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        // ^^^ here it is (first)!
    }

<...snip...>

dependencies {
    <...snip...>

    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    // ^^^ all three required ^^^ (second)
}

Et dans les tests instrumentés (requis aussi):

import androidx.test.espresso.Espresso.onData
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.*
import androidx.test.espresso.assertion.ViewAssertions.*
import androidx.test.espresso.matcher.RootMatchers.*
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import org.hamcrest.Matchers.*
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
@LargeTest
class ApplicationTest {
    @Test
    fun thruStillThrullyThrue() {
        // do interaction with some UI
        onView(withId(R.id.myButtonOnMyActivity)).perform(click())

        // assert expected result
        onView(withId(R.id.myTextViewOnMyActivity)).check(matches(isDisplayed()))
    }
}

// (third)
0
tosh

Mon problème était que le champ 'testInstrumentationRunner' était spécifié dans le build.gradle (app). Changez-le en androidx si vous l'utilisez (androidx.test.runner.AndroidJUnitRunner)

J'espère que cela aide quelqu'un, bravo!

0
Derwrecked

Je suis assez certain Android.support.test.runner.AndroidJUnitRunner est fourni par la bibliothèque runner.

  1. Installez le Android Support Repository (ce que vous avez déjà fait)
  2. Ajoutez runner à vos dépendances

ça devrait ressembler à ça

dependencies {
    ...
    androidTestCompile 'com.Android.support.test:runner:0.2'
}
0
Enrico