Espresso boşta kalma kaynakları

Boşta kalma kaynağı, sonuçları etkileyen eşzamansız bir işlemi temsil eder kullanıcı arayüzü testindeki sonraki işlemleri ifade eder. Boştaki kaynakları Espresso ile birlikte kullanıldığında bu eşzamansız işlemleri güvenli bir şekilde doğrulayabilirsiniz. en iyi uygulamaları paylaşacağız.

Boştaki kaynakların ne zaman gerekli olacağını belirleyin

Espresso, müşterilerin ofislerine senkronizasyon özellikleri. Bu ancak bu, yalnızca 2020'nin sonuna kadar gerçekleştirilen MessageQueue etiketindeki iletiler, örneğin İçeriği ekrana çizen View.

Çünkü Espresso, aşağıdakiler dahil olmak üzere diğer eşzamansız işlemlerden arka plan iş parçacığı üzerinde çalışan kullanıcılar için, Espresso garantisini vermiyoruz. Espresso'yu, uygulamanızın bu markadan uzun süreli işlemlerde her birini boşta kaynak olarak kaydetmeniz gerekir.

Uygulamanızın sonuçlarını test ederken boşta kalma kaynaklarını kullanmıyorsanız eş zamansız olarak çalışırsanız, kendinizi testlerinizi iyileştirmek için kötü geçici çözümleri güvenilirlik:

  • Thread.sleep() numaralı telefona aramalar ekleniyor. Google Takvim widget'ını testlerinize yapay gecikmeler ekleneceğinden, test paketinizin ve testleriniz bazen yine de başarısız olabilir. daha yavaş cihazlar. Ayrıca bu gecikmeler de iyi ölçeklenmez çünkü uygulamanız gelecekteki sürümlerden birinde daha fazla zaman alıcı eşzamansız işler gerçekleştirmesi gerekecek.
  • Yeniden deneme sarmalayıcıları uygulama; Uygulamanız, zaman aşımı gerçekleşene kadar eşzamansız çalışma gerçekleştirmeyi sürdürür. Hatta testlerinizde maksimum yeniden deneme sayısı belirtirseniz her yeniden yürütme sistem kaynakları, özellikle de CPU.
  • CountDownLatch örneklerini kullanma, bir veya daha fazla iş parçacığının belirli sayıda işlem yapılana kadar beklemesine izin ver yerine getirildiğinden emin olun. Bu nesneler için bir zaman aşımı süresi; Aksi takdirde uygulamanız süresiz olarak engellenebilir. Mandallar kodunuza gereksiz karmaşıklık da ekleyerek bakımı zorlaştırır.

Espresso, bu güvenilir olmayan geçici çözümleri testlerinizden kaldırmanıza ve bunun yerine uygulamanızın eşzamansız çalışmasını boşta kalan kaynaklar olarak kaydedin.

Yaygın kullanım alanları

Testlerinizde aşağıdaki örneklere benzer işlemler gerçekleştirirken bir boşta kaynak kullanmayı düşünün:

  • İnternetten veya yerel bir veri kaynağından veri yükleme.
  • Veritabanları ve geri çağırma işlevleriyle bağlantılar kurma.
  • Hizmetleri yönetme; bir sistem hizmeti ya da IntentService.
  • Bit eşlem dönüşümleri gibi karmaşık iş mantığı gerçekleştirme.

Özellikle bu işlemler gerçekleştirildiğinde boşta kalma kaynaklarının kaydedilmesi testlerinizin ardından doğruladığı bir kullanıcı arayüzünü güncelleyin.

Örnek boşta kalma kaynağı uygulamaları

Aşağıdaki listede boştaki kaynakların birkaç örnek uygulaması açıklanmaktadır. uygulamanıza entegre edebilirsiniz:

CountingIdlingResource
Etkin görevlerin bir sayacını kullanır. Sayaç sıfır olduğunda, ilişkilendirilen kaynak boşta olarak kabul edilir. Bu işlev, genel olarak kullanılan bir Semaphore Çoğu durumda bu uygulama, test sırasında uygulamanızın eşzamansız çalışmasını yönetmek için yeterlidir.
UriIdlingResource
Şuna benzer: CountingIdlingResource, ancak sayacın kaynak boşta olarak kabul edilir. Bu ek bekleme süresi, ağ isteklerini dikkate alır. İş parçacığınızdaki bir uygulama, talebinize yanıt aldıktan hemen sonra istekte bulunabilirsiniz.
IdlingThreadPoolExecutor
Özel bir ThreadPoolExecutor uygulaması oluşturulan iş parçacığındaki çalışan görevlerin toplam sayısını takip eden havuzlar. Bu sınıfta bir CountingIdlingResource - aktif görevlerin sayacını korumaktır.
IdlingScheduledThreadPoolExecutor
Şunun özel uygulaması: ScheduledThreadPoolExecutor. Reklam gücü, işlevselliklerini ve yeteneklerini IdlingThreadPoolExecutor takip edebilir, ayrıca ilerisi için planlanan görevleri yürütülmesi planlanıyor.
ziyaret edin.
'nı inceleyin.

Kendi boşta kalma kaynağınızı oluşturun

Uygulamanızın testlerinde boşta kalma kaynakları kullanırken aşağıdakileri sağlamanız gerekebilir: veya günlük kaydı oluşturun. Böyle durumlarda, uygulamalar yeterli olmayabilir. Bu durumda, veya kendi uygulamanızı oluşturun.

Kendi boşta kalma kaynak işlevinizi uyguluyorsanız aşağıdakileri en iyi şekilde koruyun: ve özellikle de ilkini dikkate alın:

Boşta kalma denetimlerinin dışında boşta durumuna geçişleri çağırın.
Uygulamanız boşta kaldıktan sonra şunu arayın: onTransitionToIdle() projenin isIdleNow(). Bu şekilde ekip Espresso ikinci bir şey yapmaz, böylece belirli bir sorunun boşta olan kaynak boşta.

Aşağıdaki kod snippet'inde bu öneri gösterilmiştir:

Kotlin

fun isIdle() {
    // DON'T call callback.onTransitionToIdle() here!
}

fun backgroundWorkDone() {
    // Background work finished.
    callback.onTransitionToIdle() // Good. Tells Espresso that the app is idle.

    // Don't do any post-processing work beyond this point. Espresso now
    // considers your app to be idle and moves on to the next test action.
}

Java

public void isIdle() {
    // DON'T call callback.onTransitionToIdle() here!
}

public void backgroundWorkDone() {
    // Background work finished.
    callback.onTransitionToIdle() // Good. Tells Espresso that the app is idle.

    // Don't do any post-processing work beyond this point. Espresso now
    // considers your app to be idle and moves on to the next test action.
}
Boşta kalan kaynakları ihtiyaç duymadan önce kaydedin.

Boştaki kaynaklarla ilişkili senkronizasyon avantajları yalnızca geçerli olur Espresso'nun, bu kaynağın isIdleNow() yöntemini kullanabilirsiniz.

Aşağıdaki listede bu özelliğin çeşitli örnekleri gösterilmektedir:

  • Boşta olan bir kaynağı @Before ek açıklamasına sahip bir yönteme kaydederseniz boştaki kaynak her testin ilk satırında geçerli olur.
  • Bir test içinde boşta kalma kaynağı kaydederseniz boştaki kaynak sonraki Espresso tabanlı işlem sırasında geçerli olur. Bu davranış hâlâ ancak bir sonraki işlem boştaki kaynağı kaydeder.
Boşta kalan kaynakların kaydını, kullanma işlemini tamamladıktan sonra iptal edin.

Sistem kaynaklarını korumak için boştaki kaynakların kaydını en kısa sürede iptal etmeniz gerekir çünkü artık ihtiyacınız yok. Örneğin, boşta kalma kaynağı kaydederseniz bir yöntemde @Before ile biten bir yönteme başvurursanız, en iyisi yönteminde @After ile ek açıklama verilir.

Boştaki kaynakları kaydetmek ve kayıtlarını iptal etmek için bir boşta kalma kayıt defteri kullanın.

Uygulamanızın boşta kalma kaynakları için bu kapsayıcıyı kullanarak boştaki kaynakların kaydını gerektiğinde tekrar tekrar silin ve tutarlı bir şekilde gözlemleyin gösterir.

Boştaki kaynaklarda yalnızca basit uygulama durumunu koruyun.

Örneğin, uyguladığınız ve kaydettiğiniz boştaki kaynaklar View nesneye referanslar içeriyor.

Boştaki kaynakları kaydet

Espresso, uygulamanızın boşta kalma bilgilerini yerleştirebileceğiniz bir kapsayıcı sınıfı sağlar kaynaklar. Şu ada sahip bu sınıf: IdlingRegistry, bir Uygulamanıza minimum ek yük getiren bağımsız eserler. Sınıf ayrıca uygulamanızın performansını iyileştirmeye yönelik aşağıdaki adımları sürdürülebilirlik:

  • Boştaki kaynaklar yerine IdlingRegistry için referans oluşturun özelliğini kullanabilirsiniz.
  • Kullandığınız boşta kalma kaynakları koleksiyonundaki farklılıkları koruyun her derleme varyantı için ayrı bir metin sunar.
  • Boştaki kaynakları kullanıcı arayüzü yerine uygulamanızın hizmetlerinde tanımlayın bileşenlerden yalnızca birkaçı.
ziyaret edin.

Boştaki kaynakları uygulamanıza entegre edin

Bir uygulamaya boşta kalma kaynaklarını birkaç farklı şekilde ekleyebilirsiniz, ancak Bu yaklaşım, uygulamanız için kapsüllemeyi korurken bir yandan da belirli bir boşta kalma kaynağının temsil ettiği belirli bir işlemi belirtmenizi sağlar.

Uygulamanıza boşta kalma kaynakları eklerken, kaynak mantığını uygulamanın kendi içinde çalıştırmasını ve yalnızca testlerinizdeki kaydı iptal etme işlemleri.

Yalnızca test amaçlı bir arayüz kullanmanız gibi olağan dışı bir durum oluştursanız da, bu yaklaşımı uygulayarak üretim kodunu devre dışı bırakırsanız boşta kalan kaynakları uygulamanızın APK boyutunu ve yöntem sayısını korur.

Alternatif yaklaşımlar

Uygulamanızın üretim ortamında boşta kalma kaynakları mantığını tercih etmiyorsanız bir dizi uygulanabilir entegrasyon stratejisi daha vardır:

  • Gradle'ınki gibi derleme varyantları oluşturun ürün deneyin ve boştaki kaynakları yalnızca uygulamanızın hata ayıklama derlemesinde kullanın.
  • Uygulamanızın boşta kalma durumunu eklemek için Dagger gibi bir bağımlılık yerleştirme çerçevesi kullanın kaynak bağımlılık grafiğini testlerinize ekleyin. Dagger 2 kullanıyorsanız enjeksiyon işleminin kendisi bir alt bileşenden kaynaklanmalıdır.
  • Uygulamanızın testlerine boşta kalma kaynağı uygulayın ve bu kısmı kullanıma sunun senkronize edilmesi gereken bu uygulamaların her biri testler.

    Dikkat: Bu tasarım kararı boşta kalan kaynaklar için bağımsız bir referans oluşturur; bu da kapsamlı bir uygulamadır.

Ek kaynaklar

Android testlerinde Espresso'yu kullanma hakkında daha fazla bilgi için şu sayfaya bakın: inceleyebilirsiniz.

Örnekler