Android UI Test Nedir? Projemizde Neden Kullanmalıyız?

Ali Osman ARSLAN
Huawei Developers - Türkiye
5 min readNov 29, 2022
Android UI Test

Giriş

Merhaba, bugünkü yazımızda Android ekosisteminde UI testin ne olduğu, neden ortaya çıktığı, kullanım alanları ve teknik detaylarını sizlerle paylaşacağım.

UI Test Nedir?🤔

Android UI test, Android uygulamalarını UI sorunları için test etme yöntemidir. Etkinlikler, hizmetler ve içerik sağlayıcılar gibi Android uygulamanızı oluşturan ayrı ayrı bileşenlerin Unit testine ek olarak, bir cihazda çalışırken uygulamanızın kullanıcı ara yüzünün (UI) davranışını test etmek de önemlidir.

Uygulama işlevselliğindeki hatalar, kullanıcılar için sorunlara ve kullanıcı memnuniyetsizliğine neden olabilir. Bu nedenle, Android uygulamalarının yayınlanmadan önce uygun şekilde test edilmesi çok kritiktir.

Android UI Test neden önemlidir?

Android UI testleri, Android cihazlarda kullanıcı ara yüzünün farklı yönlerini test edebilir. Android uygulamanızın tüm cihazlarda tutarlı ve kullanıcı dostu bir deneyim sunmasına yardımcı olur. Bunları aşağıdaki 3 madde ile özetleyebiliriz;

  • UI öğelerinin düzeni: Beklendiği gibi yerleştirildiğinden emin olmak için simgeler, düğmeler, fotoğraflar, başlıklar, metin alanları, onay kutuları vb. gibi çeşitli UI öğelerinin yerleşimini kapsamlı bir şekilde kontrol edin.
  • UI Duyarlılığı: Kullanıcı arabiriminin sağlamlığını test etmek için uygulamanın farklı ekran çözünürlüklerinde nasıl görüntülendiğini kontrol eder. Firebase Test Lab kullanarak, uygulamanızı çeşitli cihazlarda ve konfigürasyonlarda test etmenize olanak tanıyan bulut tabanlı bir uygulama test altyapısıdır, böylece canlı kullanıcıların elinde nasıl performans göstereceği hakkında daha iyi bir fikir edinebilirsiniz.
  • Genel UI Görünümü ve Hissi: Buna yazı tipleri, hizalama ve görüntüleme türleri dahildir. Kabaca temel olarak, kullanıcı ara yüzünün kullanıcının bakış açısından ne kadar kullanıcı dostu olduğunu kontrol etmek için usability test kullanır.
Android UI Test

Hadi Pratik Yapalım 👨‍💻☕

Projenize Espresso bağımlılıkları ekleyelim

Test edeceğim activity_main.xml dosyamıza birkaç component ekliyorum

MainActivity class için test etkinliği oluşturmanın manuel ve otomatik yöntemi var. Android Studio bizim için otomatik bu işlemi yapabilir. MainActivity classımıza gidip class adına sağ tıklıyoruz ve “Generate…” diyoruz.

MainActivityTest Generate

Ardından “Test…” e tıklayın.

MainActivityTest Generate Test

Karşımıza gelen Create Test ekranından ilgili ayarları yapıp, “OK” butonuna tıklıyoruz.

Create Test

“Choose Destination Directory” ekranı bize androidTest ve unitTest klasörleri getiriyor. Adından da anlayacağınız üzere UI Test yapacağımız için androidTest klasörü altındaki package’ı seçip “OK” diyoruz.

Choose Destination Directory

Android Studio bizim için MainActivityTest dosyamızı oluşturuyor classımızın başına @RunWith(AndroidJUnit4ClassRunner::class) annotation’ını eklemeliyiz.. Peki nedir bu hemen açıklayalım;

RunWith(AndroidJUnit4ClassRunner::class) -> Espresso , UI Automator ve Compose test araçları dahil olmak üzere Android cihazlarda JUnit 4 testleri çalıştırmanıza izin veren bir JUnit test çalıştırıcısıdır.

Şimdi test classında dilediğimiz kadar fonksiyon oluşturuyoruz ve bu fonksiyonlar içine test etmek istediğimiz işlemleri yazıyoruz.

Görüldüğü gibi test sırasında MainActivity dosyamın var olup olmadığını, EditTextler’in belirlediğim ifadelerle doldurması gerektiğini ve Buton’a tıklama yapılması gerektiğini söyledim.

JUnit test çalıştırıcısıdır ve JUnit4 tabanlı testleri çalıştırmamızı sağlar. JUnit için önemli bazı ekler vardır. Bunlardan Bazıları:

  • @Test -> Normal bir yöntemi testten ayırmak için kullanılır.
  • @Before ve @After -> Class içerisinde herhangi bir testten önce veya sonra kod yürütmek için kullanılır.
  • @Rule -> Test senaryolarına davranış eklemek için kullanılır.
  • @BeforeClass ve @AfterClass -> @Before ve @After a benzerdir tek farkları sadece bir kere çalıştırılmak için kullanılır.
Android Espresso

Espresso üç temel bileşenden oluşur ve kuralları oluşturmak için bu üç temel bileşenin öğrenilmesi gerekir.

  • View Matcher -> Test edilecek öğeyi seçiniz (Edittext, textView…) Örnek: onView(ViewMatcher)
  • View Action -> Seçilen öğe üzerinde istenen işlemi gerçekleştirin. Örnek: .perform(ViewAction)
  • View Assertion -> Görünümleri kontrol etmenizi sağlar. Örnek:.check(ViewAssertion)

Espresso testleri için durum yapısı aşağıdaki gibidir:

1-onView(ViewMatcher) -> Görünümü bulur

2- .perform(ViewAction) -> Görünüm üzerinde bir eylem gerçekleştirir.

3- .check(ViewAssertion) -> Bir olayı doğrular

Aşağıdaki kod, Espresso test framework kullanımını gösterir:

Espresso, ViewMatcher aracılığıyla bir görünüm bulamazsa, hata mesajına tüm görünüm hiyerarşisini dahil eder. Bu problem analizi için faydalıdır.

Peki test sınıfımı nasıl çalıştırabilirim?

Test dosyamı çalıştırmak için MainActivityTest’e sağ tıklayıp Run diyorum

MainActivityTest.kt classımıza yazdığımız tüm kodları çalıştırmak için class adına sağ tıklayıp Run diyebiliriz veya 4 farklı test fonksiyonu yazdıysak ve sadece 3. fonksiyonu çalıştırmak istiyorsak ilgili fonksiyonun üstüne sağ tıklayıp “Run” diyebiliriz.

Test Results

Test classımda yazmış olduğum 4 test fonksiyonu da başarılı bir şekilde çalışıp testi tamamladığını görmüş olduk.

Test Çıktımız

Sonuç🍾

Test etmek ve ekranımızın beklendiği gibi çalıştığından emin olmak çok zor olmadı. Başarıyla çalışan ve her telefonda hızlıca tüm componentleri test etmek için sadece “Run” tuşuna basın ve arkanıza yaslanıp kahvenizi yudumlayın, tüm testi sizin yerinize espresso yapıyor olacak.

Görüşmek üzere👋

Referanslar

--

--