Klasa AndroidJUnitRunner
to narzędzie do uruchamiania testów JUnit,
pozwala przeprowadzać zinstrumentowane testy JUnit 4 na urządzeniach z Androidem,
w tym użytkowników korzystających z interfejsów Espresso, UI Automator i Compose
i testowania.
Moduł wykonujący test wczytuje pakiet testowy i testowaną aplikację w urządzenia, przeprowadzanie testów i raportować ich wyniki.
Umożliwia on wykonanie kilku typowych zadań testowych, m.in.:
- Pisanie testów JUnit
- Uzyskiwanie dostępu do kontekstu aplikacji
- Filtrowanie testów
- Testy fragmentacji
Zapisywanie testów JUnit
Poniższy fragment kodu pokazuje, jak napisać instrumentowaną jednostkę JUnit 4
aby sprawdzić, czy operacja changeText
w ChangeTextBehavior
zajęcia działają poprawnie:
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 ActivityTestRule<MainActivity>; 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))); } }
Dostęp do kontekstu aplikacji
Przeprowadzając testy przy użyciu narzędzia AndroidJUnitRunner
, masz dostęp do kontekstu
dla testowanej aplikacji przez wywołanie statycznej
Metoda ApplicationProvider.getApplicationContext()
. Jeśli masz niestandardowy profil
podklasa klasy Application
w Twojej aplikacji, ta metoda zwraca Twoją niestandardową
kontekst podklasy.
Jeśli jesteś implementatorem narzędzi, możesz uzyskać dostęp do interfejsów API testów niskiego poziomu za pomocą
InstrumentationRegistry
. Te zajęcia obejmują:
Obiekt Instrumentation
, obiekt aplikacji docelowej Context
, test
Context
aplikacji oraz argumenty wiersza poleceń przekazane do testu.
Filtruj testy
W testach JUnit 4.x możesz używać adnotacji do konfigurowania przebiegu testowego. Ten minimalizuje potrzebę dodawania powtarzalnych i warunkowych kodów testów. Oprócz standardowych adnotacji obsługiwanych przez JUnit 4, Runner obsługuje też adnotacje typowe dla Androida, w tym :
@RequiresDevice
: określa, że test powinien być uruchamiany tylko na urządzeniach fizycznych na emulatorach, a nie na emulatorach.@SdkSuppress
: zapobiega uruchamianiu testu na niższym interfejsie API Androida. poziom niż podany poziom. Na przykład w celu pominięcia testów na wszystkich niższych poziomach interfejsu API niż 23 od uruchomienia, należy użyć adnotacji@SDKSuppress(minSdkVersion=23)
.@SmallTest
,@MediumTest
i@LargeTest
: określ, ile czasu ma trwać test i częstotliwość przeprowadzania testu. Ty może użyć tej adnotacji do przefiltrowania, które testy należy uruchomić, Właściwośćandroid.testInstrumentationRunnerArguments.size
:
-Pandroid.testInstrumentationRunnerArguments.size=small
Testy fragmentów
Jeśli chcesz równolegle wykonywać testy, udostępniając je
wielu serwerów, aby działały szybciej, można podzielić je na grupy
fragmenty. Narzędzie do uruchamiania testów pozwala podzielić pakiet testów na kilka
na fragmenty, dzięki czemu można łatwo przeprowadzać testy należące do tego samego fragmentu razem jako
grupy reklam. Każdy fragment jest identyfikowany przez numer indeksu. Przeprowadzając testy, używaj
-e numShards
, aby określić liczbę osobnych fragmentów do utworzenia i wartość
-e shardIndex
określający, który fragment ma zostać uruchomiony.
Aby na przykład podzielić pakiet testowy na 10 fragmentów i uruchomić tylko testy zgrupowane w drugim fragmencie, użyj następującego polecenia adb:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
Użyj narzędzia Android Testinteresor
Android Test Assistant pozwala uruchamiać testy aplikacji w jej
własne wywołanie funkcji Instrumentation
. Jeśli korzystasz z AndroidJUnitRunner w wersji 1.0
lub wyższej wersji, masz dostęp do narzędzia Android Test Agency.
Android Test Assistant zapewnia poniższe korzyści związane z testowaniem środowisko:
- Minimalny stan udostępniania: każdy test działa w osobnym stanie
Instrumentation
. instancji. Jeśli więc testy mają wspólny stan aplikacji, większość z nich po każdym teście zostanie usunięte z procesora lub pamięci urządzenia. Aby usunąć wszystkie udostępnione stany z procesora i pamięci urządzenia po każdym użyj flagiclearPackageData
. Zapoznaj się z sekcją Włączanie z poziomu Gradle . - Awarie są wyizolowane: nawet jeśli jedna awaria testowa ulegnie awarii, spowoduje to usunięcie tylko
instancji
Instrumentation
. Oznacza to, że pozostałe testy pakiet wciąż działa, co daje pełne wyniki testu.
Ta izolacja może spowodować wydłużenie czasu wykonywania testu, ponieważ Android Test Assistant uruchamia aplikację po każdym teście.
Zarówno Android Studio, jak i Laboratorium Firebase korzystają z narzędzia Android Test Agency jest zainstalowana fabrycznie, ale trzeba ją jednak włączyć w Androidzie Studio.
Włącz z poziomu Gradle
Aby włączyć narzędzie Android Test Agency za pomocą narzędzia wiersza poleceń Gradle, wykonaj następujące czynności: wykonaj te czynności:
- Krok 1. Zmodyfikuj plik Gradle. Dodaj następujące oświadczenia do
plik
build.gradle
projektu:
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'
}
- Krok 2. Uruchom Android Test Assistant, wykonując to polecenie:
./gradlew connectedCheck
Włącz w Android Studio
Aby włączyć narzędzie Android Test Assistant w Android Studio, dodaj podane instrukcje
w sekcji Włącz z Gradle do pliku build.gradle
aplikacji.
Włącz z poziomu wiersza poleceń
Aby użyć narzędzia Android Test Artisttor w wierszu poleceń, uruchom następujące polecenia w oknie terminala:
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'
Jak widać w składni polecenia, instalujesz narzędzie Android Test Assistant i używasz go bezpośrednio.
adb shell pm list instrumentation
Korzystanie z różnych łańcuchów narzędzi
Jeśli do testowania aplikacji używasz innego łańcucha narzędzi, nadal możesz używać Androida Narzędzie testowe narzędzia LTI, wykonując te czynności:
- Niezbędne pakiety umieść w pliku kompilacji aplikacji.
- Włącz narzędzie Android Test Assistant z poziomu wiersza poleceń.
Architektura
Plik APK usługi orkiestrowej jest przechowywany w procesie będącym niezależnym od pliku testowy plik APK i pakiet APK testowanej aplikacji:
Android Test Assistant zbiera testy JUnit na początku testu
pakietu, ale później wykonuje każdy test oddzielnie, w osobnej instancji
Instrumentation
Więcej informacji
Więcej informacji o korzystaniu z AndroidJUnitRunner znajdziesz w dokumentacji interfejsu API.
Dodatkowe materiały
Więcej informacji o korzystaniu z narzędzia AndroidJUnitRunner
znajdziesz w tych artykułach:
i zasobami Google Cloud.
Próbki
- AndroidJunitRunnerSample: pokazuje adnotacje testowe, testów z parametrami i tworzenia zestawu testów.