Die Klasse AndroidJUnitRunner
ist ein JUnit-Test-Runner, der
können Sie instrumentierte JUnit 4-Tests auf Android-Geräten,
z. B. für Espresso, UI Automator und Compose
Frameworks testen.
Der Test-Runner übernimmt das Laden des Testpakets und der zu testenden App in eine Gerät, das Ausführen von Tests und das Melden von Testergebnissen.
Dieser Test-Runner unterstützt mehrere gängige Testaufgaben, darunter:
JUnit-Tests schreiben
Das folgende Code-Snippet zeigt, wie Sie
ein instrumentiertes JUnit 4 schreiben,
Test, um zu prüfen, ob der changeText
-Vorgang in ChangeTextBehavior
-Klasse ordnungsgemäß funktioniert:
Kotlin
@RunWith(AndroidJUnit4::class) // Only needed when mixing JUnit 3 and 4 tests @LargeTest // Optional runner annotation class ChangeTextBehaviorTest { val stringToBeTyped = "Espresso" // ActivityTestRule accesses context through the runner @get:Rule val activityRule = ActivityTestRule(MainActivity::class.java) @Test fun changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()) onView(withId(R.id.changeTextBt)).perform(click()) // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))) } }
Java
@RunWith(AndroidJUnit4.class) // Only needed when mixing JUnit 3 and 4 tests @LargeTest // Optional runner annotation public class ChangeTextBehaviorTest { private static final String stringToBeTyped = "Espresso"; @Rule public ActivityTestRuleM<ainActivity;> activityRule = new ActivityTestRule;<>(MainActivity.class); @Test public void changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()); onView(withId(R.id.changeTextBt)).perform(click()); // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))); } }
Auf den Kontext der Anwendung zugreifen
Wenn Sie AndroidJUnitRunner
zum Ausführen Ihrer Tests verwenden, können Sie auf den Kontext zugreifen
für die zu testende App durch Aufrufen der statischen
ApplicationProvider.getApplicationContext()
-Methode. Wenn Sie ein benutzerdefiniertes
von Application
in Ihrer App übergeben, gibt diese Methode
Kontext der abgeleiteten Klasse an.
Wenn Sie Tools implementieren, können Sie über die API
Klasse InstrumentationRegistry
. Dieser Kurs umfasst die
Instrumentation
-Objekt, das Ziel-App-Objekt Context
, den Test
Context
und die Befehlszeilenargumente, die an den Test übergeben wurden.
Tests filtern
In Ihren JUnit 4.x-Tests können Sie den Testlauf mithilfe von Annotationen konfigurieren. Dieses die Verwendung von Boilerplate und bedingtem Code in der Tests durchführen. Zusätzlich zu den von JUnit 4 unterstützten Standardanmerkungen enthält der Test Runner unterstützt auch Android-spezifische Anmerkungen, einschließlich der Folgendes:
@RequiresDevice
: Gibt an, dass der Test nur auf physischen Geräten und nicht auf Emulatoren.@SdkSuppress
: Unterdrückt die Ausführung des Tests auf einer niedrigeren Android API. Level als der angegebene Level ist. Um beispielsweise Tests auf allen API-Ebenen zu unterdrücken, als 23 davon entfernt wurden, verwenden Sie die Annotation@SDKSuppress(minSdkVersion=23)
.@SmallTest
,@MediumTest
und@LargeTest
: Klassifizieren, wie lange ein Test dauert und folglich auch, wie oft Sie den Test durchführen können. Ich können Sie mithilfe dieser Annotation filtern, welche Tests ausgeführt werden.android.testInstrumentationRunnerArguments.size
-Property:
-Pandroid.testInstrumentationRunnerArguments.size=small
Shard-Tests
Wenn Sie die Tests parallelisieren müssen,
damit sie schneller ausgeführt werden,
können Sie sie in Gruppen aufteilen oder
Shards: Der Test-Runner unterstützt die Aufteilung einer einzelnen Testsuite in mehrere
Shards. So können Sie ganz einfach Tests, die zum selben Shard gehören, gemeinsam als ein
Gruppe. Jeder Shard ist durch eine Indexnummer gekennzeichnet. Verwenden Sie beim Ausführen von Tests die Methode
-e numShards
, um die Anzahl der zu erstellenden separaten Shards anzugeben.
-e shardIndex
-Option zum Angeben des auszuführenden Shards.
Um die Testsuite beispielsweise in zehn Shards aufzuteilen und nur die Tests auszuführen, im zweiten Shard gruppiert werden, verwenden Sie den folgenden adb-Befehl:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
Android Test Orchestrator verwenden
Mit Android Test Orchestrator können Sie alle Tests Ihrer App innerhalb der
Eigener Aufruf von Instrumentation
. Bei Verwendung von AndroidJUnitRunner Version 1.0
oder höher haben Sie Zugriff auf Android Test Orchestrator.
Android Test Orchestrator bietet die folgenden Vorteile für Ihre Tests Umgebung:
- Minimaler gemeinsamer Status:Jeder Test wird in einer eigenen
Instrumentation
ausgeführt. Instanz. Wenn Ihre Tests den App-Status teilen, wird nach jedem Test von der CPU oder dem Speicher Ihres Geräts entfernt. So entfernen Sie alle gemeinsamen Status nach jedem Vorgang von der CPU und dem Arbeitsspeicher Ihres Geräts: verwenden Sie das FlagclearPackageData
. Weitere Informationen finden Sie im Abschnitt Enable from Gradle (Über Gradle aktivieren). finden Sie ein Beispiel. - Isolierte Abstürze: Selbst wenn ein Test abstürzt, werden nur die
eigene Instanz von
Instrumentation
. Das bedeutet, dass die anderen Tests Ihre Suite wird noch ausgeführt und Sie erhalten vollständige Testergebnisse.
Diese Isolation führt möglicherweise zu einer längeren Testausführungszeit, da Android Test Orchestrator startet die Anwendung nach jedem Test neu.
Android Studio und Firebase Test Lab bieten Android Test Orchestrator vorinstalliert sind. Aktivieren Sie diese Funktion unter Android Studio verfügbar.
Über Gradle aktivieren
So aktivieren Sie Android Test Orchestrator mit dem Gradle-Befehlszeilentool: diese Schritte:
- Schritt 1: Ändern Sie die Gradle-Datei. Fügen Sie die folgenden Aussagen zu Ihrem
build.gradle
-Datei des Projekts hinzugefügt:
android {
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// The following argument makes the Android Test Orchestrator run its
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
}
dependencies {
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestUtil 'androidx.test:orchestrator:1.1.0'
}
- Schritt 2: Führen Sie Android Test Orchestrator mit dem folgenden Befehl aus:
./gradlew connectedCheck
In Android Studio aktivieren
Fügen Sie die angezeigten Anweisungen hinzu, um Android Test Orchestrator in Android Studio zu aktivieren
in Enable from Gradle in der build.gradle
-Datei Ihrer App.
Über die Befehlszeile aktivieren
Führen Sie die folgenden Befehle aus, um Android Test Orchestrator über die Befehlszeile zu verwenden in einem Terminalfenster:
DEVICE_API_LEVEL=$(adb shell getprop ro.build.version.sdk)
FORCE_QUERYABLE_OPTION=""
if [[ $DEVICE_API_LEVEL -ge 30 ]]; then
FORCE_QUERYABLE_OPTION="--force-queryable"
fi
# uninstall old versions
adb uninstall androidx.test.services
adb uninstall androidx.test.orchestrator
# Install the test orchestrator.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/orchestrator/1.4.2/orchestrator-1.4.2.apk
# Install test services.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/services/test-services/1.4.2/test-services-1.4.2.apk
# Replace "com.example.test" with the name of the package containing your tests.
# Add "-e clearPackageData true" to clear your app's data in between runs.
adb shell 'CLASSPATH=$(pm path androidx.test.services) app_process / \
androidx.test.services.shellexecutor.ShellMain am instrument -w -e \
targetInstrumentation com.example.test/androidx.test.runner.AndroidJUnitRunner \
androidx.test.orchestrator/.AndroidTestOrchestrator'
Wie die Befehlssyntax zeigt, installieren Sie Android Test Orchestrator und verwenden es dann .
adb shell pm list instrumentation
Verschiedene Toolchains verwenden
Wenn Sie Ihre App mit einer anderen Toolchain testen, können Sie weiterhin Android verwenden Testen Sie Orchestrator, indem Sie die folgenden Schritte ausführen:
- Fügen Sie die erforderlichen Pakete in die Build-Datei Ihrer App ein.
- Aktivieren Sie Android Test Orchestrator über die Befehlszeile.
Architektur
Das Orchestrator-Dienst-APK wird in einem Prozess gespeichert, der unabhängig vom Test-APK und das APK der zu testenden App:
<ph type="x-smartling-placeholder">![Mit dem Orchestrator können Sie JUnit-Tests steuern.](https://developer.android.google.cn/static/training/testing/instrumented-tests/androidx-test-libraries/orchestrator.png?authuser=5&hl=de)
Android Test Orchestrator erfasst zu Beginn des Tests JUnit-Tests
ausgeführt, führt dann aber jeden Test separat in einer eigenen Instanz
Instrumentation
Weitere Informationen
Weitere Informationen zur Verwendung von AndroidJUnitRunner finden Sie in der API-Referenz.
Weitere Informationen
Weitere Informationen zur Verwendung von AndroidJUnitRunner
finden Sie hier:
Ressourcen.
Produktproben
- AndroidJunitRunnerSample: Zeigt Testanmerkungen, und die Erstellung von Testsuiten.