AndroidJUnitRunner

AndroidJUnitRunner sınıfı, aşağıdaki özelliklere sahip bir JUnit test koşucusudur: Android cihazlarda enstrümanlı JUnit 4 testlerini çalıştırmanızı sağlar Espresso, UI Automator ve Oluşturma araçlarını kullananlar dahil test çerçeveleri.

Test çalıştırıcısı, test paketinizi ve test edilen uygulamayı testlerinizi çalıştırmanıza ve test sonuçlarını rapor etmenize yardımcı olur.

Bu test çalıştırıcısı, aşağıdakiler de dahil olmak üzere bazı yaygın test görevlerini destekler:

JUnit testlerini yazma

Aşağıdaki kod snippet'i, enstrümanlı bir JUnit 4'ü nasıl yazabileceğinize ilişkin ChangeTextBehavior içindeki changeText işleminin doğrulandığını düzgün şekilde çalışıyor:

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

Uygulamanın Bağlamına Erişme

Testlerinizi çalıştırmak için AndroidJUnitRunner kullandığınızda bağlama erişebilirsiniz çağrısına bağlı olarak statik öğeleri çağırarak ApplicationProvider.getApplicationContext() yöntemini çağırın. Özel bir Application alt sınıfını seçerseniz bu yöntem, özel bağlamını ele alalım.

Araçları uygulayıcıysanız alt düzey test API'lerine InstrumentationRegistry sınıfı. Bu sınıf şunları içerir: Instrumentation nesnesi, hedef uygulama Context nesnesi, test uygulama Context nesnesi ve testinize iletilen komut satırı bağımsız değişkenleri.

Testleri filtrele

JUnit 4.x testlerinizde, test çalıştırmasını yapılandırmak için ek açıklamaları kullanabilirsiniz. Bu özelliği, uygulamanıza standart ve koşullu kod ekleme ihtiyacını testler. JUnit 4 tarafından desteklenen standart ek açıklamalara ek olarak, Runner, şunlar da dahil olmak üzere Android'e özgü ek açıklamaları da destekler: takip etmek için:

  • @RequiresDevice: Testin yalnızca fiziksel cihazda çalıştırılacağını belirtir cihazlardır.
  • @SdkSuppress: Testin daha düşük bir Android API'de çalışmasını engeller seviye üst sınırı var. Örneğin, daha düşük tüm API düzeylerinde testleri engellemek için 23'ten fazla kontrol etmek istemiyorsanız @SDKSuppress(minSdkVersion=23) ek açıklamasını kullanın.
  • @SmallTest, @MediumTest ve @LargeTest: Testin süresini sınıflandırma ve sonuç olarak da testi ne sıklıkta yapabilirsiniz? Siz bu ek açıklamayı, çalıştırılacak testleri filtrelemek için kullanabilir, android.testInstrumentationRunnerArguments.size mülk:
-Pandroid.testInstrumentationRunnerArguments.size=small

Parça testleri

Testlerinizi paralel hale getirmeniz gerekiyorsa bunları birden fazla sunucuyu daha hızlı çalışır hale getirmek, bunları gruplara bölebilirsiniz veya kırıklar. Test çalıştırıcı, tek bir test paketini birden çok teste ayırmayı destekler. Böylece, aynı kırığa ait testleri birlikte kolayca çalıştırabilir, grubu. Her kırık bir dizin numarasıyla tanımlanır. Testleri çalıştırırken, -e numShards seçeneği ile, oluşturulacak ayrı kırıkların sayısını ve -e shardIndex seçeneği ile hangi kırığın çalıştırılacağını belirtir.

Örneğin, test paketini 10 parçaya bölmek ve yalnızca testleri çalıştırmak ikinci kırıkta gruplandırılmışsa aşağıdaki adb komutunu kullanın:

adb shell am instrument -w -e numShards 10 -e shardIndex 2

Android Test Orchestrator'ı kullanma

Android Test Orchestrator, uygulamanızın her bir testini kendi Instrumentation için kendi çağrısı. AndroidJUnitRunner 1.0 sürümünü kullanırken veya daha yeni bir sürüme geçtiğinizde Android Test Orchestrator'a erişebilirsiniz.

Android Test Orchestrator, testiniz için aşağıdaki avantajları sunar ortam:

  • Minimum paylaşım durumu: Her test kendi Instrumentation içinde çalıştırılır örneğidir. Bu nedenle, testleriniz uygulama durumunu paylaşıyorsa paylaşılan durumun büyük kısmı her testten sonra cihazınızın CPU'sundan veya belleğinden kaldırılır. Her işlemden sonra cihazınızın CPU ve belleğinden tüm paylaşılan durumları kaldırmak için clearPackageData işaretini kullanın. Gradle'dan etkinleştirme sayfasına göz atın başlıklı bölüme bakın.
  • Kilitlenmeler birbirinden bağımsızdır: Bir test çökse bile yalnızca kilitlenmelerini kendi Instrumentation örneği. Bu, programdaki diğer testlerin paketiniz çalışmaya devam eder ve eksiksiz test sonuçları sağlar.

Bu yalıtım, Android Test Orchestrator her testten sonra uygulamayı yeniden başlatır.

Hem Android Studio hem de Firebase Test Lab'de Android Test Orchestrator bulunur önceden yüklenmiş olarak gelir, ancak bu özelliği Android'de etkinleştirmeniz Studio'da oturum açın.

Gradle'dan etkinleştir

Gradle komut satırı aracını kullanarak Android Test Orchestrator'ı etkinleştirmek için şu adımları uygulayın:

  • 1. Adım: Gradle dosyasını değiştirin. Aşağıdaki ifadeleri projenin build.gradle dosyası:
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'
}
  • 2. Adım: Aşağıdaki komutu çalıştırarak Android Test Orchestrator'ı çalıştırın:
./gradlew connectedCheck

Android Studio'dan etkinleştirme

Android Studio'da Android Test Orchestrator'ı etkinleştirmek için gösterilen ifadeleri ekleyin Gradle'dan etkinleştir bölümünde uygulamanızın build.gradle dosyasına ekleyin.

Komut satırından etkinleştirme

Android Test Orchestrator'ı komut satırında kullanmak için aşağıdaki komutları çalıştırın komutunu girin:

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'

Komutun söz diziminde görüldüğü gibi, Android Test Orchestrator'ı yükleyip doğrudan ekleyebilirsiniz.

adb shell pm list instrumentation

Farklı araç zincirleri kullanma

Uygulamanızı test etmek için farklı bir araç zinciri kullansanız da Android'i kullanabilirsiniz. Aşağıdaki adımları uygulayarak Orkestratör'ü test edin:

  1. Uygulamanızın derleme dosyasına gerekli paketleri ekleyin.
  2. Komut satırından Android Test Orchestrator'ı etkinleştirin.

Mimari

Orchestrator hizmet APK'sı test APK'sı ve test edilen uygulamanın APK'sı:

Düzenleyici, JUnit testlerini kontrol etmenizi sağlar
Şekil 1: Android Test Düzenleme APK'sının yapısı.

Android Test Orchestrator, testinizin başında JUnit testlerini toplar ancak daha sonra her testi ayrı ayrı, kendi örneği içinde yürütür. Instrumentation

Daha fazla bilgi

AndroidJUnitRunner'ı kullanma hakkında daha fazla bilgi edinmek için API referansına bakın.

Ek kaynaklar

AndroidJUnitRunner hakkında daha fazla bilgi için aşağıdakilere bakın kaynaklar.

Örnekler

  • AndroidJunitRunnerSample: Test ek açıklamalarını gösterir, parametre haline getirilmiş testler ve test paketi oluşturma.