Warum kann ich AndroidJUnit4 und ActivityTestRule nicht in meine Unit-Test-Klasse importieren?


73

Ich habe Probleme beim Importieren einiger Android-UI-Test-Framework-Klassen - ich kann einfach nicht herausfinden, was falsch läuft!

Das ist meine Klasse:

@RunWith(AndroidJUnit4.class)
@LargeTest
public class ExampleUnitTest {

@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule(MainActivity.class);

@Test
public void listGoesOverTheFold() {
    onView(withText("Hello world!")).check(matches(isDisplayed()));
  }
}

Aber aus irgendeinem Grund erhalte ich die Fehler "Symbol ActivityTestRule kann nicht gefunden werden" und "Symbol AndroidJUnit4 kann nicht gefunden werden". Ich habe versucht, sie zu importieren, aber sie können nicht gefunden werden.

Die Abhängigkeiten in build.gradle sind wie folgt festgelegt:

compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
androidTestCompile 'com.android.support:support-annotations:23.4.0'

androidTestCompile 'com.android.support.test:runner:0.4'
androidTestCompile 'com.android.support.test:rules:0.4'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'

Ich glaube, ich habe alle Abhängigkeiten eingerichtet - ich habe viele Dinge ausprobiert, aber ohne Glück.

Hat jemand irgendwelche Ideen?


In welchem ​​Verzeichnis befindet sich Ihre Testklasse - test/javaoder androidTest/java?
Jahnold

1
Es ist im Test / Java
Hallupa

4
Was ist, wenn mein Test läuft androidTest/javaund ich dieses Problem habe?
Alayor

Antworten:


62

Es gibt zwei verschiedene Arten von Tests, die Sie in Android einrichten können

Unit Tests

  • Diese werden direkt auf der JVM ausgeführt und haben keinen Zugriff auf die Android-Framework-Klassen.
  • Sie werden im test/javaPaket aufbewahrt
  • Abhängigkeiten müssen mit dem Befehl in der Datei build.gradle hinzugefügt werden testCompile
  • Für diese Tests verwenden Sie im Allgemeinen Mockito, Robolectric & JUnit

Instrumentierungstests

  • Diese laufen auf einem Android-Emulator und haben vollen Zugriff auf alle Android-Klassen
  • Sie werden im androidTest/javaPaket aufbewahrt
  • Abhängigkeiten müssen hinzugefügt werden, um build.gradle mit zu erstellen androidTestCompile
  • Für diese Tests verwenden Sie im Allgemeinen Espresso und JUnit

Soweit ich Ihnen sagen kann, versuchen Sie, Instrumentierungstests mit Espresso zu schreiben, haben aber Ihren Test in der test/javaPackung, die für Komponententests vorgesehen ist. In diesem Fall müssen Sie Ihre Testklasse in das androidTest/javaPaket verschieben.


3
Danke, das ist gelöst! Ich wusste nicht, dass es einen Unterschied zwischen Test / Java und AndroidTest / Java gibt
Hallupa

Stellen Sie sicher, dass Sie auch TestImplement'com.android.support.test:rules:1.0.2'
GeekWithGlasses

127

Fügen Sie diese in der neueren Version hinzu:

androidTestImplementation 'com.android.support.test:rules:1.0.2'
androidTestImplementation 'com.android.support.test:runner:1.0.2'

58

Wenn Sie auf AndroidX migriert haben, verwenden Sie Folgendes:

androidTestImplementation 'androidx.test:rules:1.1.1'
androidTestImplementation 'androidx.test:runner:1.1.1'

36

Hinzufügen:

androidTestImplementation 'com.android.support.test:rules:1.0.2'

Behebt das Problem, aber vergessen Sie nicht, das Projekt mit Gradle-Dateien zu synchronisieren. Erst dann werden die Änderungen wirksam.


22

brauche dies, um Abhängigkeiten hinzuzufügen

 testCompile 'com.android.support.test:rules:0.5'
 testCompile 'com.android.support.test:runner:0.5'

'com.android.support.test: rules: 0.5' und 'com.android.support.test: running: 0.5' sind für androidTest, nicht test. also sollte es androidTestCompile sein 'com.android.support.test: rules: 0.5' androidTestCompile 'com.android.support.test: running: 0.5'
thuongle

androidTestImplementation von Android Studio 3.x auf
Ewoks

11

Abhängigkeit hinzufügen.

androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.android.support.test:runner:0.5'

6

Von androidX verwenden

androidTestImplementation 'androidx.test:rules:1.1.1'

androidTestImplementation 'androidx.test:runner:1.1.1'

In Ihrem Abhängigkeitsabschnitt in Ihrer build.gradle-Datei auf App-Ebene

für zB:

 dependencies {

     androidTestImplementation 'androidx.test:rules:1.1.1'
     androidTestImplementation 'androidx.test:runner:1.1.1'
 }

Dann importieren

import androidx.test.rule.ActivityTestRule;


2

Stellen Sie sicher, dass Sie UI-Tests ((Tests, die auf Android-Geräten / Emulatoren ausgeführt werden)) in Android schreiben

  1. Die Testklassen sind in androidTest Paket eher , dass Testpaket.

  2. Stellen Sie sicher, dass Sie die folgenden Abhängigkeiten in build.gradle vornehmen

androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
testImplementation 'junit:junit:4.13'

Stellen Sie für Unit-Tests (Tests, die auf JVM ausgeführt werden) sicher, dass

1.Test Klassen sind in Testpaket

2. Stellen Sie sicher, dass Sie die folgenden Abhängigkeiten in build.gradle herstellen

testImplementation 'junit:junit:4.13'
testImplementation 'org.mockito:mockito-core:2.23.0'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.