Bu sayfada, Android uygulamalarını test etmenin temel ilkeleri (temel en iyi uygulamalar ve avantajları dahil) açıklanmaktadır.
Android becerileri
GitHub'da gösterTest stratejisi oluşturma
android skills add testing-setupTest etmenin avantajları
Test yapmak, uygulama geliştirme sürecinin ayrılmaz bir parçasıdır. Uygulamanızı herkese açık olarak yayınlamadan önce tutarlı bir testle uygulamanızın doğruluğunu, işlevsel davranışını ve kullanılabilirliğini onaylayabilirsiniz.
Uygulamanızda gezinerek manuel olarak test edebilirsiniz. Farklı cihazlar ve emülatörler kullanabilir, sistem dilini değiştirebilir ve her kullanıcı hatasını oluşturmaya veya her kullanıcı işlemleri akışını incelemeye çalışabilirsiniz.
Ancak manuel testler, ölçeklendirme açısından yetersizdir ve uygulamanızın davranışındaki gerilemeleri gözden kaçırmanıza neden olabilir. Otomatik test, testleri sizin yerinize gerçekleştiren araçların kullanılmasını içerir. Bu yöntem daha hızlıdır, daha tekrarlanabilirdir ve genellikle geliştirme sürecinin başlarında uygulamanız hakkında daha fazla uygulanabilir geri bildirim sağlar.
Android'deki test türleri
Mobil uygulamalar karmaşıktır ve birçok ortamda iyi çalışması gerekir. Bu nedenle, birçok test türü vardır.
Konu
Örneğin, konuya göre farklı test türleri vardır:
- İşlevsel test: Uygulamam yapması gerekenleri yapıyor mu?
- Performans testi: İşlemi hızlı ve verimli bir şekilde yapıyor mu?
- Erişilebilirlik testi: Erişilebilirlik hizmetleriyle iyi çalışıyor mu?
- Uyumluluk testi: Her cihazda ve API düzeyinde iyi çalışıyor mu?
Kapsam
Testler ayrıca boyuta veya izolasyon derecesine göre de değişir:
- Birim testleri veya küçük testler, uygulamanın yalnızca çok küçük bir bölümünü (ör. bir yöntem veya sınıf) doğrular.
- Uçtan uca testler veya büyük testler, uygulamanın daha büyük bölümlerini (ör. tüm ekran veya kullanıcı işlemleri akışı) aynı anda doğrular.
- Orta düzey testler ise bu ikisinin arasında yer alır ve iki veya daha fazla birim arasındaki entegrasyonu kontrol eder.
Testleri sınıflandırmanın birçok yolu vardır. Ancak uygulama geliştiriciler için en önemli ayrım, testlerin nerede çalıştırıldığıdır.
Araçlı testler ve yerel testler
Testleri bir Android cihazda veya başka bir bilgisayarda çalıştırabilirsiniz:
- Araçlı testler, fiziksel veya emülasyonlu bir Android cihazda çalışır. Uygulama, komutları ekleyen ve durumu okuyan bir test uygulamasıyla birlikte derlenip yüklenir. Araçlı testler genellikle kullanıcı arayüzü testleridir. Bir uygulamayı başlatır ve ardından uygulamayla etkileşime girer.
- Yerel testler, geliştirme makinenizde veya bir sunucuda yürütüldüğünden ana makine tarafındaki testler olarak da adlandırılır. Genellikle küçük ve hızlıdırlar, test edilen konuyu uygulamanın geri kalanından ayırırlar.
Tüm birim testleri yerel değildir ve tüm uçtan uca testler bir cihazda çalıştırılmaz. Örneğin:
- Büyük yerel test: Robolectric gibi yerel olarak çalışan bir Android simülatörü kullanabilirsiniz.
- Küçük enstrümantasyon testi: Kodunuzun SQLite veritabanı gibi bir çerçeve özelliğiyle iyi çalıştığını doğrulayabilirsiniz. SQLite'ın birden fazla sürümüyle entegrasyonu kontrol etmek için bu testi birden fazla cihazda çalıştırabilirsiniz.
Örnekler
Aşağıdaki snippet'ler, bir öğeyi tıklayan ve başka bir öğenin gösterildiğini doğrulayan araçlı kullanıcı arayüzü testinde kullanıcı arayüzüyle nasıl etkileşim kurulacağını gösterir.
Espresso
// When the Continue button is clicked
onView(withText("Continue"))
.perform(click())
// Then the Welcome screen is displayed
onView(withText("Welcome"))
.check(matches(isDisplayed()))
Compose kullanıcı arayüzü
// When the Continue button is clicked
composeTestRule.onNodeWithText("Continue").performClick()
// Then the Welcome screen is displayed
composeTestRule.onNodeWithText("Welcome").assertIsDisplayed()
Bu snippet, bir ViewModel için birim testinin bir bölümünü (yerel, ana makine tarafındaki test) gösterir:
// Given an instance of MyViewModel
val viewModel = MyViewModel(myFakeDataRepository)
// When data is loaded
viewModel.loadData()
// Then it should be exposing data
assertTrue(viewModel.data != null)
Test edilebilir mimari
Test edilebilir bir uygulama mimarisinde kod, farklı bölümlerini tek tek kolayca test etmenize olanak tanıyan bir yapıya sahiptir. Test edilebilir mimarilerin daha iyi okunabilirlik, sürdürülebilirlik, ölçeklenebilirlik ve yeniden kullanılabilirlik gibi başka avantajları da vardır.
Test edilemeyen bir mimari şunlara yol açar:
- Daha büyük, daha yavaş ve daha kararsız testler. Birim testi yapılamayan sınıflar daha büyük entegrasyon testleri veya kullanıcı arayüzü testleriyle kapsanabilir.
- Farklı senaryoları test etmek için daha az fırsat sunar. Daha büyük testler daha yavaş olduğundan bir uygulamanın tüm olası durumlarını test etmek gerçekçi olmayabilir.
Mimari yönergeleri hakkında daha fazla bilgi edinmek için uygulama mimarisi kılavuzuna bakın.
Bağlantıyı kaldırma yaklaşımları
Bir işlevin, sınıfın veya modülün bir kısmını geri kalanından ayırabilirseniz test etmek daha kolay ve daha etkili olur. Bu uygulamaya ayrıştırma denir ve test edilebilir mimari için en önemli kavramdır.
Yaygın olarak kullanılan ayrıştırma teknikleri şunlardır:
- Uygulamayı sunu, alan ve veri gibi katmanlara ayırın. Ayrıca bir uygulamayı her özellik için bir tane olacak şekilde modüllere de bölebilirsiniz.
- Aktiviteler ve parçalar gibi büyük bağımlılıkları olan varlıklara mantık eklemekten kaçının. Bu sınıfları çerçeveye giriş noktaları olarak kullanın ve kullanıcı arayüzü ile iş mantığını Composable, ViewModel veya alan katmanı gibi başka bir yere taşıyın.
- İş mantığı içeren sınıflarda doğrudan çerçeve bağımlılıklarından kaçının. Örneğin, ViewModel'lerde Android bağlamlarını kullanmayın.
- Bağımlılıkların değiştirilmesini kolaylaştırın. Örneğin, somut uygulamalar yerine arayüzler kullanın. DI çerçevesi kullanmıyor olsanız bile bağımlılık ekleme yöntemini kullanın.
Sonraki adımlar
Neden test yapmanız gerektiğini ve iki ana test türünü öğrendiğinize göre Neleri test etmelisiniz? başlıklı makaleyi okuyabilir veya Test stratejileri hakkında bilgi edinebilirsiniz.
Alternatif olarak, ilk testinizi oluşturmak ve yaparak öğrenmek istiyorsanız Test codelab'lerine göz atın.