Uygulamanızın etkinliklerini test etme

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()
            }
        }
    }
}