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 birCountingIdlingResource
- aktif görevlerin sayacını korumaktır. IdlingScheduledThreadPoolExecutor
- Şunun özel uygulaması:
ScheduledThreadPoolExecutor
. Reklam gücü, işlevselliklerini ve yetenekleriniIdlingThreadPoolExecutor
takip edebilir, ayrıca ilerisi için planlanan görevleri yürütülmesi planlanıyor. ziyaret edin.
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()
projeninisIdleNow()
. Bu şekilde ekip Espresso ikinci bir şey yapmaz, böylece belirli bir şeyin 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 olan bir kaynağı
- 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şta kalan 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çı.
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.
Önerilen yaklaşım
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
- IdlingResourceSample: Arka plan işleriyle senkronizasyon.