Çok İşlemli Espresso

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:

app/build.gradle

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:

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ş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:

  1. 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 bir AndroidJUnitRunner örneği içerir. Bu aşamada 2 araç işlemi birbiriyle iletişim kuramaz.
  2. Her AndroidJUnitRunner örneği, test çerçevesi olarak Espresso'yu kaydeder.
  3. İki AndroidJUnitRunner örneği arasında bağlantı kurmak için el sıkışma gerçekleştirilir. Aynı zamanda her AndroidJUnitRunner ö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.
  4. 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:

Şekil 1. MultiProcess Espresso'yu kullanarak birden fazla enstrümantasyon işlemi arasında iletişim kurma

Ek kaynaklar

Bu konuyla ilgili daha fazla bilgi için aşağıdaki kaynaklara başvurun.