AndroidJUnitRunner

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.:

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 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)));
    }
}

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 flagi clearPackageData. 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 Academytor 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:

  1. Niezbędne pakiety umieść w pliku kompilacji aplikacji.
  2. 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:

Administracja umożliwia kontrolowanie testów JUnit
Rysunek 1. Struktura pliku APK Administracji Testów Androida.

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