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çinclearPackageData
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:
- Uygulamanızın derleme dosyasına gerekli paketleri ekleyin.
- Komut satırından Android Test Orchestrator'ı etkinleştirin.
Mimari
Orchestrator hizmet APK'sı test APK'sı ve test edilen uygulamanın APK'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.