Çok İşlemli Espresso

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:

  1. 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.
  2. Her AndroidJUnitRunner örneği, Espresso'yu test çerçevesi olarak kaydeder.
  3. AndroidJUnitRunner'ın 2 örneği, birbirleriyle bağlantı kurmak için el sıkışma işlemi gerçekleştirir. Aynı zamanda her AndroidJUnitRunner ö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.
  4. 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:

1. şekil. Çoklu işlem Espresso'yu kullanarak birden fazla enstrümantasyon süreci arasında iletişim kurma

Ek kaynaklar

Bu konu hakkında daha fazla bilgi için aşağıdaki kaynaklara göz atın.