Uygulamanız büyüdükçe uygulama bileşenlerinizden bazılarını uygulamanızın ana işleminden farklı bir işleme yerleştirmek faydalı olabilir. Bu varsayılan olmayan işlemlerdeki uygulama bileşenlerini test etmek için MultiProcess Espresso'nun işlevlerini kullanabilirsiniz. Android 8.0 (API düzeyi 26) ve sonraki sürümlerde kullanılabilen bu araç, Espresso'nun senkronizasyon garantilerini korurken uygulamanızın işlem sınırlarını aşan kullanıcı arayüzü etkileşimlerini sorunsuz bir şekilde test etmenize olanak tanır.
MultiProcess Espresso'yu kullanırken, sürüm oluşturma ve kapsamla ilgili aşağıdaki noktaları göz önünde bulundurun:
- Uygulamanız Android 8.0 (API düzeyi 26) veya sonraki sürümleri hedeflemelidir.
- Bu araç yalnızca uygulamanızın paketindeki işlemlere eklediğiniz uygulama bileşenlerini test edebilir. Harici süreçleri test edemez.
Aracı kullanma
MultiProcess Espresso'yu kullanarak uygulamanızdaki bir süreci test etmek için uygulamanızın build.gradle
dosyasına espresso-remote yapısına bir referans ekleyin:
Modern
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.4.0' }
Kotlin
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.4.0') }
Aşağıdakileri de uygulamanızın androidTest
manifest dosyasına eklemeniz gerekir:
- Süreci tanımlayan bir
<instrumentation>
öğesi. - MultiProcess Espresso'yu kullanmak istediğinizi belirten bir
<meta-data>
öğesi.
Aşağıdaki kod snippet'inde bu öğelerin nasıl ekleneceği gösterilmektedir:
<manifest ... package="androidx.test.mytestapp.tests"> <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" /> <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" android:targetPackage="androidx.test.mytestapp" android:targetProcesses="*"> <meta-data android:name="remoteMethod" android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" /> </instrumentation> </manifest>
Önceki snippet, Android çerçevesine uygulamanızın paketindeki her işlemi test etmesini istediğinizi belirtir. Uygulama işlemlerinizin yalnızca bir alt kümesini test etmek istiyorsanız bunun yerine targetProcesses
öğesi içinde virgülle ayrılmış bir liste belirtebilirsiniz:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Aracın mimarisini anlama
Uygulamanızı test edip varsayılan işlemini başlattığınızda, bir düğmeye basma gibi ikincil işlemde etkinlik başlatan bir kullanıcı arayüzü etkileşimi gerçekleştirebilirsiniz. Daha sonra sistem, Espresso kullanarak çapraz işlem testi etkinleştirmek için aşağıdaki adımları tamamlar:
- Android Framework, uygulamanızın gezinme yapısını takip etmek için yeni bir süreç oluşturur ve başlatır. Her
Instrumentation
işlemi yeni birAndroidJUnitRunner
örneği içerir. Bu aşamada 2 araç işlemi birbiriyle iletişim kuramaz. - Her
AndroidJUnitRunner
örneği, test çerçevesi olarak Espresso'yu kaydeder. - İki
AndroidJUnitRunner
örneği arasında bağlantı kurmak için el sıkışma gerçekleştirilir. Aynı zamanda herAndroidJUnitRunner
örneği, Espresso gibi tüm kayıtlı müşterileri başka işlemlerde ilgili eşdeğerleriyle bağlayarak bu istemcilerin kendi aralarında doğrudan bir iletişim kanalı oluşturabilmelerini sağlar. - Her
AndroidJUnitRunner
örneği, yeni eklenen araç örneklerini ve test çerçevesi istemcilerini aramaya devam ederek gerektiğinde ek iletişim kanalları oluşturur.
Şekil 1'de bu sürecin sonucu gösterilmektedir:
Ek kaynaklar
Bu konuyla ilgili daha fazla bilgi için aşağıdaki kaynaklara başvurun.
- Google I/O 2017'de Android'de Test Destek Kitaplığı ile Android'de Test Tabanlı Geliştirme oturum videosu 36:41'de başlar.