MVVM + Clean Architecture Android projenizin modüllerini test etme Bölüm 2: Use Caselerini Test Etme[Başlangıç]

Sabrina Cara
Huawei Developers - Türkiye
4 min readJul 1, 2022
Source: https://www.educba.com/use-case-testing/

Merhaba harika insanlar, bu sefer yazı serimizin ikinci bölümü ile TEKRAR geri döndük. Bu kısa yazıda, kullanım senaryosu test senaryolarının nasıl uygulanacağını kısa ve basit bir şekilde açıklayacağım. Lafı fazla uzatmadan hemen konuya geçelim.

Giriş

Bu serinin ilk makalesinde açıkladığımız ve defalarca tekrar ettiğim gibi (biraz sıkıcı olmaya başlıyor), MVVM ve Clean Architecture kullanmanın, geliştirme ve kod kalitesinden, android proje geliştirmeniz, ölçeklenebilirlik, hata ayıklama ve test etme kolaylığı için çok büyük faydaları vardır.

Bir önceki yazımızda MVVM/Clean Architecture ve daha birçok yöntemi kullanarak basit bir android film uygulaması oluşturduk. Bu linkten ulaşabilir ve inceleyebilirsiniz. Şimdi Use Case testine geçelim!

Use Case Testleri

Kullanım senaryosu testine geçmek için, kullanım senaryosunun gerçekte ne olduğuna dair kısa bir açıklama yapmamız muhtemelen iyi bir fikirdir.

Pekala, MVVM metodolojilerinde aslında Modeller, Viewler ve iş mantığımızı çıkardığımız View Modelleri var. Ancak, ölçeğin artmasıyla birlikte projenin yönetilmesi ve test edilmesi daha karmaşık hale geldiğinden, bu her zaman iyi bir fikir değildir. Bu nedenle, iş mantığını depolamak için view modelleri yerine usecase’leri kullanırız ve diğer dış katmanlardaki değişikliklerden korunmaları ve kapsüllenmeleri için onları Clean Architecture’imizin domain katmanında tutarız. Peki onları nasıl test edeceğiz?

Gelişim

Bu test uygulama sürecinin bir parçası olarak yapmamız gereken ilk adım, test süreci için gereken bağımlılıkları uygulama build.gradle dosyasına dahil etmek olacaktır.

//Testing
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.mockito:mockito-core:2.11.0'
testImplementation 'android.arch.core:core-testing:1.1.1'
testImplementation "com.google.truth:truth:1.1"
// For Robolectric tests.
testImplementation("com.google.dagger:hilt-android-testing:2.28-alpha")
// For instrumented tests.
androidTestImplementation("com.google.dagger:hilt-android-testing:2.28-alpha")
// ...with Kotlin.
kaptTest("com.google.dagger:hilt-android-compiler:2.40.5")

Bağımlılıkları dahil edip projeyi senkronize ettikten sonra işleme başlayacağız.

Domain modülümüzde uyguladığımız use case’ine gidiyoruz, sınıf adında görünen küçük sarı ampulü tıklayıp test oluştur diyoruz. Alternatif olarak, bunu manuel olarak yapmayı tercih edebilirsiniz, ancak yeni oluşturulan test sınıfı otomatik olarak doğru test klasörüne yerleştirileceğinden bu en iyi yoldur.

Üstteki resim, test sınıfını nasıl oluşturabileceğinizi gösterir. Biz JUnit4'ü seçiyoruz ama siz de JUnit5'i seçebilirsiniz. Test sınıfını oluşturduktan sonra artık test senaryolarını oluşturmaya hazırız.

Film Listesi Use Case Testi:

Oluşturduğumuz ve bir önceki yazıda gösterdiğimiz projenin film listesi kullanım örneği şu şekildedir:

Gördüğünüz gibi, içine film listesi repository’ni enjekte ediyoruz, bu nedenle bu kullanım senaryosu için bir test senaryosu oluşturmak için, kullanım senaryosuna ‘beslememiz’ gereken bilgilerle sahte bir depo oluşturmamız gerekiyor.

Film Listesi Repository için aşağıdaki gibi sahte bir depo oluşturdum:

Kullanım senaryosuna bazı sahte veriler sağlamamız gerektiğinden gerçek Film Listesi Repository’ni kullanamayız, ancak içinde bildirilen işlevleri kullanmak için oluşturduğumuz sahte repo’deki gerçek repo’yu genişletebiliriz.

Movie List Use Case Testing sınıfımızda, teste başlamadan önce fake repository’yi ilan ediyoruz ve bunu use case’de bir argüman olarak iletiyoruz.

Bundan sonra, her durumda film listesinin doğru ve yanlış bir dönüşü için 2 test oluşturuyoruz.

Film adlarını “title” olarak ararız, çünkü gerçekte “title1”, “title2” ve “title3” verilerimizdeki başlıkları adlandırırız. Bu başlık için gerçekten bir sonuç alıp almadığımızı görmek istiyoruz, bu nedenle assertThat yöntemini kullanıyoruz ve ilk sonucun başlığının “title1”e eşit olup olmadığını karşılaştırıyoruz. True dönmelidir.

Benzer şekilde, yanlış filmi aldığımızda durumu değerlendiren başka bir test senaryosu oluşturuyoruz. Aşağıda gösterildiği gibi iki başarılı test durumu elde ederiz.

Film Ayrıntıları Use Case Testi:

Önceki test senaryolarına benzer şekilde, film ayrıntıları kullanım senaryosu için de test senaryoları oluşturuyoruz.

Bu durumda, Film Ayrıntıları Repository’ni genişleten ve test senaryomuzu beslemek için yapay veriler içeren bir repo oluştururuz.

Test senaryomuzda, daha önce açıklanan ve oluşturulan test senaryolarına benzer şekilde, az önce oluşturduğumuz Repository’yi başlatıyoruz ve ardından test senaryolarını hazırlıyoruz.

Diğer test senaryolarına benzer şekilde, çıktının beklediğimiz olup olmadığını belirlemek için assertThat yöntemini kullanırız.

Bu test durumlarının sonuçları aşağıdaki gibidir:

Sonuç

Bu yazımızda, kullanım senaryolarımıza beslememiz gereken sahte verileri içeren Mock Repository’ler oluşturarak ve davranışlarını ve/veya sonuçlarını gözlemleyerek basit use case testlerinin nasıl oluşturulacağını kısaca anlattık. Önümüzdeki makalelerde diğer unit test case’lerini ele alacağız, ancak o zamana kadar sağlıkla kalın ve yakında görüşürüz!

Referanslar

Use Case And Use Case Testing Complete Tutorial

--

--