Android UI Test
Selamlar, bu yazımda sizlere UI test nedir? Neden yapılır? Android tarafında nasıl uygulanır? Konularından bahsedeceğim.
Android uygulamaları söz konusu olduğunda, işlevsel bir kullanıcı arayüzü (UI) esastır. UI test, kullanıcı ara yüzünden yapılan bir test türüdür. Kullancının ekranda etkileşime girdiği bileşenlerin olası senaryolara göre test edilmesi diyebiliriz. Yani kullanıcı buttona bastığı zaman nasıl bir aksiyon beklediğimizi test edebiliriz. Ui test tamamen son kullanıcı odaklı bir test türüdür. Akışı baştan sona tamamen (uçtan uca) kontrol etmek için bu testler kullanılır. Bu testlerin doğruluk oranı diğerlerine göre daha yüksektir çünkü gercek bir cihazda gerçek hayat kullanımını simüle ederler. Uygulamanız için yazılan toplam testlerin yaklaşık %10'unu oluşturmaktadır. Literatürde Black Box test olarak da adlandırılmaktadır.
Android dünyasında ui test yazmak için genellikle Espresso kütüphanesi tercih edilmektedir. Espresso, geliştiricilerin güvenilir ve otomatik kullanıcı arayüzü testleri yazmasına yardımcı olmak için google tarafından yayınlanan bir test aracıdır.
UI Test Yazmanın Faydaları
Sürekli ui üzerinden manuel test yapmak yerine gerekli kodları yazarak otomatize etmemizi sağlar. Bu da bize zaman kazandırır.
Daha kaliteli uygulamalar çıkarmamızı sağlar.
Düzgün çalışan, kararlı, kullanıcı dostu bir arayüz elde etmemizi sağlar.
Hataları erken tespit etmemiz gibi avantajlar sağlamaktadır.
Espresso Kütüphanesinin Kullanımı
Projenize Espresso bağımlılıkları eklemek için aşağıdaki adımları tamamlayın:
- Uygulamanızın
build.gradle
dosyasını açın. Bu genellikle en üst düzeybuild.gradle
dosya değil ,app/build.gradle
. - Bağımlılıkların içine aşağıdaki satırları ekleyin:
androidTestImplementation('androidx.test.espresso:espresso-core:3.4.0')
androidTestImplementation('androidx.test:runner:1.4.0')
androidTestImplementation('androidx.test:rules:1.4.0')
3. Instrumentation Runner ayarlayın.
build.gradle
Aynı dosyaya aşağıdaki satırı ekleyin android.defaultConfig
:
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
Kod tarafına geçmeden önce biraz Espressonun kendi yapısından bahsedeceğim.
Espresso’nun ana bileşenleri aşağıdakileri içerir:
- Espresso — Görünümlerle etkileşimlere giriş noktası (
onView()
ve aracılığıylaonData()
). gibi herhangi bir görünüme bağlı olması gerekmeyen API'leri de ortaya çıkarırpressBack()
. - ViewMatchers
Matcher<? super View>
– Arabirimi uygulayan nesneler topluluğu .onView()
Geçerli görünüm hiyerarşisi içinde bir görünümü bulmak için bunlardan birini veya birkaçını yönteme iletebilirsiniz . - ViewActions — Yönteme
ViewAction
geçirilebilen nesneler topluluğuViewInteraction.perform()
, örneğinclick()
. - ViewAssertions
ViewAssertion
– Yöntemden geçirilebilecek bir nesne koleksiyonuViewInteraction.check()
. Çoğu zaman, o anda seçili olan görünümün durumunu belirtmek için bir görünüm eşleştirici kullanan eşleşme iddiasını kullanacaksınız.
Bazı Örnek Kodlar
Örnek 1:
Burada kullanıcı bulunduğu sayfadan onBackPress() yaptığı zaman backstackte bulunan bir önceki sayfaya yönlenmesi test ediliyor.
Navigation test edeceğimiz için navController mockluyoruz. pressBack() sayesinde espressoya geri tuşuna basması gerektiğini bildiriyoruz. Verify ile geriye gitti mi ? Kontrolünü sağlıyoruz.
Örnek 2:
Burada ise kullanıcı floating action button basınca istenilen sayfaya yönlenip yönlenmemesi test edilmektedir.
launhFragmentHiltContainer ile launch etmek istediğimiz fragmente veriyoruz. Navigation test edeceğimiz için navigation kendisini mockluyoruz. Onview da espressoya floating action button bul diyoruz daha sonra perform sayesinde floating action button ne yapmalı bunu bildiriyoruz. Burada click eventini kullanıyoruz çünkü buttona tıklandığı zaman sayfa geçişi yaptırıyoruz. En sonda verify methodunu kullanarak navigation actionlarımız arasında doğru navigate işlemini yapıyor mu ? Bunu test etmiş oluyoruz.
Okuduğunuz için teşekkürler.
Keyifli kodlamalar.
Kaynaklar
Android’de Unit Test, Integration Test, UI Test (mobiler.dev)
Android Espresso UI Test — Mobilhanem
https://github.com/atilsamancioglu/IA27-ArtBookHiltTesting
Test UI for a single app | Android Developers
https://www.youtube.com/watch?v=j8jQq-kYgDU&list=PLgCYzUzKIBE_ZuZzgts135GuLQNX5eEPk