Espresso ile Android UI Test

En son güncellendiği tarih: May 30

Test, uygulama geliştirme sürecinin önemli bir parçasıdır


Hali hazırda çalışan bir uygulamamızda geliştirme yaparken ( özellikle büyük çaplı projelerde geliştirme yaparken ) herhangi bir değişiklik veya güncelleme durumunda uygulamamızdaki özelliklerin doğru bir şekilde çalışıp çalışmadığını bilmek isteriz.



Bu sayede kullanıcı etkileşimlerini tek bir uygulamada arayüzün doğru bir şekilde çalışıp çalışmadığını test etmek ve beklenmeyen sonuçları engellemek adına Android 'in bize sunmuş olduğu kütüphanelerden faydalanabiliriz. Kullanıcı arayüz testi (UI Test) uygulama üzerinde kullanıcı işlemlerini gerçekleştirerek işlemlerin doğru şekilde çalışıp çalışmadığını kontrol eder. Bu testler manuel şekilde zaman kayıplarına ve hatalara sebebiyet verebilir. Android Studio, UI testlerini manuelden kurtarıp otomatikleştirmek için kütüphanelere sahiptir. Bu yazıda UI testi kütüphanesi olan Espresso kütüphanesinden bahsedeceğiz ve çalışan örnek bir test demo'su gerçekleştireceğiz.




Espresso, Android için güvenilir kullanıcı arayüzü testlerini yazmamızı kolaylaştıran bir Framework'dür. Test işlemleri kullanıcı arayüzü ile senkron bir şekilde çalışabilecek yapıya sahiptir.


Öncelikle Espresso'yu projemize dahil ederek başlayalım


Test etmek istediğimiz xml ve activity'leri tamamlayalım. Ben xml'in görünümünü şu şekilde ayarladım:




Peki istediğimiz activity'nin UI testine nasıl ulaşıyoruz?


Yazdığımız testleri inceleyeceğimiz class ExampleInstrumentedTest isimli class'ımızdır.


Android UI testlerinde Instrumented mekanizmasını testleri yürütebilmek için kullanıyoruz.


Bu tür testler uygulama içeriğine erişmemizi sağlar. Böylece test etmek istediğimiz uygulamaya test kodundan erişim sağlarız.


Farklı kullanıcı arayüzü eylemleriyle kullanıcı davranışı sağlayan Instrumented API'sine ulaşılır.

ExampleInstrumentedTest isimli classımızı ayrıntılı bir şekilde inceleyelim.



Mevcut Test hakkında bilgilere erişmek için Instrumented Registry'yi kullanıyoruz. Class ilk açıldığında import edilmiş olan test runner, test uygulamanızı bir cihaza yüklemeyi, testleri çalıştırmayı ve test sonuçlarını bildirmeyi yönetir.


Bu şekilde mevcut test sınıfını kullanabilir ya da kendimiz bir test sınıfı oluşturabiliriz ancak kendimiz bir test sınıfı oluşturacaksak bu oluşturduğumuz sınıfta ya da bu sınıfın bir üst sınıfında @RunWith(AndroidJunit :: class) annotation'ını class'ın başına eklemeliyiz.


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


@Test

@Before

@After

@Rule

@BeforeClass

@AfterClass


@Test normal bir yöntemi testten ayırmak için kullanılır. @Rule test senaryolarına davranış eklemek için kullanılır. Class içerisinde herhangi bir testten önce veya sonra kod yürütmek için @Before veya @After kullanılabilir ayrıca @BeforeClass veya @AfterClass bunlara benzerdir, herhangi bir testten önce veya sonra kod yürütmek için kullanılır ancak tek farkları sadece bir defa çalıştırılacaklar ise kullanılırlar.

(Tüm mobil uygulamaların sahip olduğu kullanıcı arayüzü ( UI ekranı ) View ve ViewGroup nesneleri ile gerçekleştirilir.)


Espresso üç temel bileşenden oluşur ve kural oluşturmak için bu üç temel bileşeni öğrenmeliyiz.


View Matcher -> Test etmek istediğimiz elementi seçeriz(Edittext, textView...)

View Action -> Seçmiş olduğumuz elementin üzerinde istediğimiz işlemi yaparız.

View Assertion -> Görünümü kontrol etmemizi sağlar.




onView(ViewMatcher) .perform(ViewAction) .check(ViewAssertion)


Espresso'da görünümleri eşleştirmek ve bulmak için onView( ) kullanılır. Eşleşen görünüm ile etkileşimi kurmak için ViewInteraction nesnesini kullanır.


Sık sık kullanılan görünüm eşleştiriciler

  • withId( ) -> Test etmek istediğimiz UI görünümünün id'sini gireriz.

onView(withId(R.id.editText))

  • withText( ) -> String türünde bir argüman girmemizi sağlar.

onView(withText("Hello Espresso!!"))

  • withEffectiveVisibility( ) -> Bir nesnenin görünürlüğünün kodda nasıl ayarlandığını kontrol eder.

 onView(withId(R.id.textView)).check(matches(withEffectiveVisibility(Visibility.VISIBLE))) 

  • doesNotExist( ) -> Görünümün olup olmadığını kontrol eder

onView(withId(R.id.textView)).check(doesNotExist())

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



Görüldüğü gibi test sırasında EditTextler'in belirlediğim ifadelerle doldurması gerektiğini, Buton'a ve Spinner'a tıklama yapılması gerektiğini ifade ettim.


Apimizi test etmek adına çalıştırmak için













RecyclerView ile test etkileşimi


Projenizde bulunan RecyclerView'ı test etmek için öncelikle build.gradle'a dahil etmemiz gerekenleri yazalım:


Daha sonra test classımıza RecyclerView'ın 2.pozisyonundaki nesnesine tıklanıp tıklanmadığının testini yapmak istediğimizi belirtelim.




Tüm testleri Gradle üzerinde çalıştırmak için


Gradle içindeki ConnectedDebugAndroidTest'e sağ tıklayıp run ederek görüntüleyebiliriz.


Proje github linki: https://github.com/demirtasm/EspressoTutorial



#Android #Kotlin #UITest #Espresso

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın