AndroidJUnitRunner
sınıfı, Android cihazlarda Espresso, UI Automator ve Compose test çerçevelerini kullananlar da dahil olmak üzere Android cihazlarda enstrümanlı JUnit 4 testlerini çalıştırmanızı sağlayan bir JUnit test çalıştırıcısıdır.
Test çalıştırıcı, test paketinizi ve test edilen uygulamayı bir cihaza yükleme, testlerinizi çalıştırma ve test sonuçlarını raporlama işlemlerini gerçekleştirir.
Bu test çalıştırıcı, aşağıdakiler dahil çeşitli yaygın test görevlerini destekler:
JUnit testlerini yaz
Aşağıdaki kod snippet'i, ChangeTextBehavior
sınıfındaki changeText
işleminin doğru şekilde çalıştığını doğrulamak için izlemeli bir JUnit 4 testini nasıl yazabileceğinizi gösterir:
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 statik ApplicationProvider.getApplicationContext()
yöntemini çağırarak test edilen uygulamanın bağlamına erişebilirsiniz. Uygulamanızda Application
için özel bir alt sınıf oluşturduysanız bu yöntem özel alt sınıfınızın bağlamını döndürür.
Araçları uygulayan bir kullanıcıysanız InstrumentationRegistry
sınıfını kullanarak alt düzey test API'lerine erişebilirsiniz. Bu sınıf; Instrumentation
nesnesini, hedef uygulama Context
nesnesini, test uygulaması Context
nesnesini ve testinize iletilen komut satırı bağımsız değişkenlerini içerir.
Testleri filtreleyin
JUnit 4.x testlerinizde, test çalıştırmasını yapılandırmak için ek açıklamaları kullanabilirsiniz. Bu özellik, testlerinize standart kod ve koşullu kod ekleme ihtiyacını en aza indirir. Test çalıştırıcı, JUnit 4 tarafından desteklenen standart ek açıklamalara ek olarak aşağıdakiler de dahil olmak üzere Android'e özel ek açıklamaları da destekler:
@RequiresDevice
: Testin emülatörlerde değil, yalnızca fiziksel cihazlarda çalışması gerektiğini belirtir.@SdkSuppress
: Testin belirtilen düzeyden daha düşük bir Android API düzeyinde çalışmasını engeller. Örneğin, 23'ten düşük API düzeylerinde testlerin çalışmasını engellemek için@SDKSuppress(minSdkVersion=23)
ek açıklamasını kullanın.@SmallTest
,@MediumTest
ve@LargeTest
: Bir testin ne kadar sürmesi gerektiğini ve dolayısıyla testi ne sıklıkta çalıştırabileceğinizi sınıflandırın. Çalıştırılacak testleri filtrelemek içinandroid.testInstrumentationRunnerArguments.size
özelliğini ayarlayarak bu ek açıklamayı kullanabilirsiniz:
-Pandroid.testInstrumentationRunnerArguments.size=small
Parçalama testleri
Testlerinizin yürütülmesini paralel hale getirmeniz gerekiyorsa testlerinizin daha hızlı çalışması için bunları birden fazla sunucuda paylaşarak bunları gruplara veya parçalara bölebilirsiniz. Test çalıştırıcı, tek bir test paketinin birden fazla parçaya bölünmesini destekler. Böylece, aynı parçaya ait olan testleri grup olarak kolayca çalıştırabilirsiniz. Her kırık bir dizin numarasıyla tanımlanır. Testleri çalıştırırken, oluşturulacak ayrı parça sayısını belirtmek için -e numShards
seçeneğini ve hangi kırığın çalıştırılacağını belirtmek için -e shardIndex
seçeneğini kullanın.
Örneğin, test paketini 10 parçaya bölmek ve yalnızca ikinci kırıkta gruplandırılmış testleri çalıştırmak için aşağıdaki adb komutunu kullanın:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
Android Test Orchestrator'ı Kullan
Android Test Orchestrator, uygulamanızın her testini kendi Instrumentation
çağrısıyla çalıştırmanızı sağlar. AndroidJUnitRunner 1.0 veya üzeri bir sürümü kullanırken Android Test Orchestrator'a erişebilirsiniz.
Android Test Orchestrator, test ortamınız için aşağıdaki avantajları sunar:
- Minimum paylaşılan durum: Her test kendi
Instrumentation
örneğinde çalışır. Bu nedenle, testleriniz uygulama durumunu paylaşıyorsa bu paylaşılan durumun çoğu her testten sonra cihazınızın CPU veya belleğinden kaldırılır. Her testten sonra cihazınızın CPU ve belleğinden tüm paylaşılan durumu kaldırmak içinclearPackageData
işaretini kullanın. Örnek için Gradle'dan etkinleştirme bölümüne bakın. - Kilitlenmeler birbirinden bağımsızdır: Testlerden biri kilitlense bile yalnızca kendi
Instrumentation
örneğini kaldırır. Bu da paketinizdeki diğer testlerin çalışmaya devam ederek tam test sonuçları sağladığı anlamına gelir.
Android Test Orchestrator her testten sonra uygulamayı yeniden başlattığından, bu izolasyon test yürütme süresinde olası bir artışa neden olur.
Hem Android Studio'da hem de Firebase Test Lab'de Android Test Orkestratörü önceden yüklenmiştir, ancak bu özelliği Android Studio'da etkinleştirmeniz gerekir.
Gradle'dan etkinleştir
Gradle komut satırı aracını kullanarak Android Test Orchestrator'ı etkinleştirmek için şu adımları tamamlayın:
- 1. Adım: Gradle dosyasını değiştirin. Projenizin
build.gradle
dosyasına aşağıdaki ifadeleri ekleyin:
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 Gradle'dan etkinleştir bölümünde gösterilen ifadeleri uygulamanızın build.gradle
dosyasına ekleyin.
Komut satırından etkinleştir
Android Test Orchestrator'ı komut satırında kullanmak için bir terminal penceresinde şu komutları çalıştırın:
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'
Komut söz diziminde gösterildiği gibi Android Test Orchestrator'ı yükleyip doğrudan kullanıyorsunuz.
adb shell pm list instrumentation
Farklı araç zincirleri kullanma
Uygulamanızı test etmek için farklı bir araç zinciri kullanıyorsanız aşağıdaki adımları tamamlayarak Android Test Orchestrator'ı kullanmaya devam edebilirsiniz:
- Gerekli paketleri uygulamanızın derleme dosyasına ekleyin.
- Komut satırından Android Test Orchestrator'ı etkinleştirin.
Mimari
Orchestrator hizmeti APK'sı, test APK'sından ve test edilen uygulamanın APK'sından ayrı bir işlemde depolanır:
![Orkestratör, JUnit testlerini kontrol etmenize olanak tanır](https://developer.android.google.cn/static/training/testing/instrumented-tests/androidx-test-libraries/orchestrator.png?authuser=5&hl=tr)
Android Test Orchestrator, test paketi çalıştırmanızın başında JUnit testlerini toplar, ancak daha sonra her testi kendi Instrumentation
örneğinde ayrı ayrı yürütür.
Daha fazla bilgi
AndroidJUnitRunner'ı kullanma hakkında daha fazla bilgi için API referansına bakın.
Ek kaynaklar
AndroidJUnitRunner
kullanımı hakkında daha fazla bilgi için aşağıdaki kaynaklara başvurun.
Sana Özel
- AndroidJunitRunnerSample: Test ek açıklamalarını, parametreleştirilmiş testleri ve test paketi oluşturmayı gösterir.