Uygulamanız büyüdükçe, uygulama bileşenlerinizin bir kısmını uygulamanızın ana işlemi dışında bir işleme yerleştirmenin faydalı olduğunu görebilirsiniz. Uygulama bileşenlerini bu varsayılan olmayan işlemlerde test etmek için çok işlemli Espresso'nun işlevini 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 süreç sınırlarını aşan kullanıcı arayüzü etkileşimlerini sorunsuz bir şekilde test etmenizi sağlar.
Çoklu işlem Espresso'yu kullanırken aşağıdaki sürüm oluşturma ve kapsamla ilgili hususları göz önünde bulundurun:
- Uygulamanız Android 8.0 (API düzeyi 26) veya sonraki sürümleri hedeflemelidir.
- Araç yalnızca uygulamanızın paketindeki işlemlere dahil ettiğiniz uygulama bileşenlerini test edebilir. Harici işlemleri test edemez.
Aracı kullanma
Çoklu işlem Espresso'yu kullanarak uygulamanızdaki bir süreci test etmek için uygulamanızın build.gradle
dosyasındaki espresso-remote yapıtına bir referans ekleyin:
app/build.gradle
Groovy
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1' }
Kotlin
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1') }
Ayrıca, uygulamanızın androidTest
manifest dosyasına aşağıdakileri de eklemeniz gerekir:
- Süreci tanımlayan bir
<instrumentation>
öğesi. - Çoklu İşlem Espresso'yu kullanmak istediğinizi belirten bir
<meta-data>
öğesi.
Aşağıdaki kod snippet'inde bu öğelerin nasıl ekleneceği gösterilmektedir:
src/androidTest/AndroidManifest.xml
<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şlemin test edilmesini istediğinizi belirtir. Uygulamanızın yalnızca bir alt küme işlemlerini test etmek istiyorsanız bunun yerine targetProcesses
öğesinde 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, ikincil bir işlemde etkinlik başlatan bir kullanıcı arayüzü etkileşimi (ör. düğmeye basma) gerçekleştirebilirsiniz. Sistem daha sonra Espresso kullanarak süreçler arası testleri 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 işlem oluşturup başlatır. Her
Instrumentation
işlemi,AndroidJUnitRunner
öğesinin yeni bir örneğini içerir. Bu aşamada, 2 enstrümantasyon işlemi birbiriyle iletişim kuramaz. - Her
AndroidJUnitRunner
örneği, Espresso'yu test çerçevesi olarak kaydeder. AndroidJUnitRunner
'ın 2 örneği, birbirleriyle bağlantı kurmak için el sıkışma işlemi gerçekleştirir. Aynı zamanda herAndroidJUnitRunner
örneği, Espresso gibi tüm kayıtlı istemcileri diğer işlemlerdeki karşılıklarıyla bağlar. Böylece bu istemciler kendi aralarında doğrudan bir iletişim kanalı oluşturabilir.- Her
AndroidJUnitRunner
örneği, yeni eklenen enstrümantasyon örneklerini ve test çerçevesi istemcilerini aramaya devam eder ve gerektiğinde ek iletişim kanalları oluşturur.
Şekil 1'de bu sürecin sonucu gösterilmektedir:

Ek kaynaklar
Bu konu hakkında daha fazla bilgi için aşağıdaki kaynaklara göz atın.
- Android Testing Support Library ile Android'de Test Odaklı Geliştirme Google I/O 2017'deki oturum videosu, 36:41'den itibaren.