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?

Hallupa
quelle
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.

Jahnold
quelle
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'
Smaran
quelle
58

Wenn Sie auf AndroidX migriert haben, verwenden Sie Folgendes:

androidTestImplementation 'androidx.test:rules:1.1.1'
androidTestImplementation 'androidx.test:runner:1.1.1'
peresisUser
quelle
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.

Bartosz Posieczek
quelle
22

brauche dies, um Abhängigkeiten hinzuzufügen

 testCompile 'com.android.support.test:rules:0.5'
 testCompile 'com.android.support.test:runner:0.5'
Wunderkind007
quelle
'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'
velraj
quelle
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;

Vinay John
quelle
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'
Amit Gupta
quelle