Etkinlikler, uygulamanızdaki her kullanıcı etkileşimi için kapsayıcı görevi görür. uygulama etkinliklerinizin cihaz düzeyinde nasıl davrandığını test etmek aşağıdakiler gibi olaylar:
- Cihazın telefon uygulaması gibi başka bir uygulama, uygulamanızın etkinliğini kesintiye uğratıyor.
- Sistem, etkinliğinizi kaldırır ve yeniden oluşturur.
- Kullanıcı, etkinliğinizi yeni bir pencere ortamına yerleştirir. Örneğin: pencere içinde pencere (PIP) veya çoklu pencere.
Özellikle, etkinliğinizin doğru bir şekilde yönetildiğinden emin olmanız Etkinlikte yer alan etkinliklerde yaşam döngüsü boyunca geçerlidir.
Bu kılavuzda, uygulamanızın verileri yönetme becerisini nasıl değerlendireceğiniz açıklanmaktadır. Uygulamanızda bütünlük ve iyi bir kullanıcı deneyimi sunmanızı isteriz. farklı durumlara karşılık geliyor.
Bir etkinliğin durumunu etkinleştirme
Uygulamanızın etkinliklerini test etmenin önemli bir noktası, uygulamanızın
neler yapabileceğiyle ilgili konuştuk. Bu “verilen” kavramını bir parçası olarak
ActivityScenario
örnekleri,
bir kısmını
AndroidX Test kitaplığı. Bu sınıfı kullanarak şunları yapabilirsiniz:
Etkinlikleri, cihaz düzeyindeki etkinlikleri simüle eden durumlara yerleştirme
ActivityScenario
, yerel birim testlerinde kullanabileceğiniz platformlar arası bir API'dir
entegrasyon testlerinde test ediliyor. Gerçek veya sanal bir cihazda
ActivityScenario
, iş parçacığı güvenliğini sağlayarak etkinlikleri
testin araç iş parçacığı ve test edilen etkinliğinizi çalıştıran iş parçacığı.
API, özellikle bir etkinliğin altında bulunan test çözüldüğünde veya oluşturulduğunda davranır. Bu bölümde, proje yönetimiyle ilgili kullanım alanı olabilir.
Etkinlik oluştur
Test edilen etkinliği oluşturmak için aşağıdaki snippet'te gösterilen kodu ekleyin:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { } } }
Etkinliği oluşturduktan sonra, ActivityScenario
etkinliği
RESUMED
durumu. Bu durum, etkinliğinizin devam etmekte olduğunu ve
kullanıcılara görünür. Bu durumda, etkinliğinizin
Espresso kullanıcı arayüzü testlerini kullanan View
öğeleri.
Google, test esnasında etkinlikte close
adlı kişiyi aramanızı önerir.
gerekir. Bu işlem, ilişkili kaynakları temizler ve
ve kararlılığını kontrol edin. ActivityScenario
, Closeable
özelliğini uygular. Böylece şunları yapabilirsiniz:
use
uzantısını ya da Java programlamasında try-with-resources
komutunu uygulayın
otomatik olarak kapanmasını sağlar.
Alternatif olarak, otomatik olarak telefon etmek için ActivityScenarioRule
kullanabilirsiniz
Her testten ActivityScenario.launch
ve ActivityScenario.close
önce
test sökümü var. Aşağıdaki örnekte bir kuralın nasıl tanımlanacağı ve bir
örneği inceleyelim:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @get:Rule var activityScenarioRule = activityScenarioRule<MyActivity>() @Test fun testEvent() { val scenario = activityScenarioRule.scenario } }
Etkinliği yeni bir duruma sürün
Etkinliği CREATED
veya STARTED
gibi farklı bir duruma yönlendirmek için şu numarayı arayın:
moveToState()
. Bu işlem, etkinliğinizin şu anda devam ettiği
üçüncü taraf bir uygulama veya başka bir uygulama ya da cihaz tarafından kesintiye uğradığı için
sistem işlemidir.
Aşağıdaki kod snippet'inde moveToState()
kullanımıyla ilgili bir örnek verilmiştir:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { scenario -> scenario.moveToState(State.CREATED) } } }
Geçerli etkinlik durumunu belirleme
Test edilen bir etkinliğin mevcut durumunu belirlemek için
ActivityScenario
nesnenizin içindeki state
alanı. Bu, özellikle
test edilen bir etkinliğin durumunu kontrol etmek için
aşağıdaki kodda gösterildiği gibi, başka bir etkinlik veya kendini bitirir
snippet:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { scenario -> scenario.onActivity { activity -> startActivity(Intent(activity, MyOtherActivity::class.java)) } val originalActivityState = scenario.state } } }
Etkinliği yeniden oluştur
Bir cihazdaki kaynaklar azaldığında sistem bir etkinliği yok edebilir.
Kullanıcı uygulamanıza döndüğünde uygulamanızın bu etkinliği yeniden oluşturmasını gerekli kılar.
Bu koşulları simüle etmek için recreate()
komutunu çağırın:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { scenario -> scenario.recreate() } } }
ActivityScenario
sınıfı, etkinliğin kayıtlı örnek durumunu korur ve
@NonConfigurationInstance
kullanılarak açıklama eklenen tüm nesneler. Bu nesneler yüklenir
test edilen etkinliğinizin yeni örneğine ekleyin.
Etkinlik sonuçlarını alma
Sonuç kodunu veya tamamlanmış bir etkinlikle ilişkilendirilmiş verileri almak için
ActivityScenario
nesnenizdeki result
alanının değerine (aşağıda gösterildiği gibi)
şu kod snippet'ini kullanabilirsiniz:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testResult() { launchActivity<MyActivity>().use { onView(withId(R.id.finish_button)).perform(click()) // Activity under test is now finished. val resultCode = scenario.result.resultCode val resultData = scenario.result.resultData } } }
Etkinlikteki işlemleri tetikleyin
ActivityScenario
içindeki tüm yöntemler çağrıları engellediğinden API şunları gerektirir:
bunları enstrümantasyon iş parçacığında çalıştırmanız gerekir.
Test edilen etkinliğinizde işlemleri tetiklemek için Espresso görünüm eşleştiricileri kullanarak şunları yapabilirsiniz: görünümünüzdeki öğelerle etkileşim kurma:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { onView(withId(R.id.refresh)).perform(click()) } } }
Ancak etkinliğin kendisi üzerinde bir yöntem çağırmanız gerekiyorsa bunu yapabilirsiniz.
güvenli bir şekilde uygulamanız için ActivityAction
:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { scenario -> scenario.onActivity { activity -> activity.handleSwipeToRefresh() } } } }