Bir öğeyi veya öğe sistemini ayrı olarak test edersiniz. Örneğin, bir ViewModel'i test etmek için bir emülatör başlatmanız ve bir kullanıcı arayüzü başlatmanız gerekmez. Çünkü bu, Android çerçevesine bağlı değildir (veya bağlı değildir).
Ancak test edilen konu, çalışması için başkalarına bağlı olabilir. Örneğin, ViewModel'in çalışması için bir veri deposuna bağlı olabilir.
Test edilen bir konuya bağımlılık sağlamanız gerektiğinde, yaygın olarak yapılan uygulamalardan biri test çift (veya test nesnesi) oluşturmaktır. Test çiftleri, uygulamanızdaki bileşenler gibi görünen ve davranan ancak belirli bir davranış veya veri sağlamak için testinizde oluşturulan nesnelerdir. Bu araçların başlıca avantajları, testlerinizi daha hızlı ve daha basit hale getirmeleridir.
Test çifti türleri
İkili test türünün çeşitli türleri vardır:
Sahte | Sınıfın "çalışan" bir uygulaması olan, ancak testler için iyi ama üretime uygun olmayan bir şekilde uygulanmış bir test çifti.
Örnek: bellek içi veritabanı. Sahte veriler, taklit çerçevesi gerektirmez ve hafiftir. Bunlar tercih edilir. |
---|---|
Dik Yaka | Programladığınız şekilde davranan ve etkileşimleriyle ilgili beklentileri olan bir test çifti. Etkileşimleri tanımladığınız koşullarla eşleşmeyen sahte öğeler testleri geçemez. Örnekler genellikle tüm bunları başarmak için bir alakalı çerçeveyle oluşturulur.
Örnek: Bir veritabanındaki yöntemin tam olarak bir kez çağrıldığını doğrulayın. |
Stub | Davranışını programladığınız şekilde davranan ancak etkileşimleriyle ilgili beklentileri olmayan bir test çifti. Genellikle bir taklit çerçevesi ile oluşturulur. Sade olması için saplama yerine sahte öğeler tercih edilir. |
Dummy | İletilen ancak kullanılmayan bir test çifti (ör. yalnızca parametre olarak sağlamanız gerekiyorsa).
Örnek: Tıklama geri çağırma işlevi olarak iletilen boş bir işlev. |
Casusluk | Gerçek bir nesnenin üzerine yerleştirilen ve aynı zamanda mock'lara benzer şekilde bazı ek bilgileri de tutan sarmalayıcı. Karmaşıklık eklemek için genellikle bu etiketlerden kaçınılır. Bu nedenle, sahte veya alaylı içerikler casuslara tercih edilir. |
Gölge | Robolectric'te sahte dosya kullanıldı. |
Sahte bir örnek
UserRepository
adlı bir arayüze bağlı olan ve ilk kullanıcının adını bir kullanıcı arayüzünde gösteren bir ViewModel'i birim test etmek istediğinizi varsayalım. Arayüzü uygulayıp bilinen verileri döndürerek sahte bir test çifti oluşturabilirsiniz.
object FakeUserRepository : UserRepository {
fun getUsers() = listOf(UserAlice, UserBob)
}
val const UserAlice = User("Alice")
val const UserBob = User("Bob")
Bu sahte UserRepository
öğesinin, üretim sürümünün kullanacağı yerel ve uzak veri kaynaklarına bağlı olmasına gerek yoktur. Dosya, test kaynak grubunda bulunur ve üretim uygulamasıyla birlikte gönderilmez.
Aşağıdaki test, ViewModel'in ilk kullanıcı adını görünüme doğru şekilde gösterdiğini doğrular.
@Test
fun viewModelA_loadsUsers_showsFirstUser() {
// Given a VM using fake data
val viewModel = ViewModelA(FakeUserRepository) // Kicks off data load on init
// Verify that the exposed data is correct
assertEquals(viewModel.firstUserName, UserAlice.name)
}
ViewModel test kullanıcısı tarafından oluşturulduğundan, UserRepository
öğesini bir sahte öğeyle değiştirmek birim testinde kolaydır. Ancak daha büyük testlerde rastgele öğeleri değiştirmek zor olabilir.
Bileşenleri değiştirme ve bağımlılık ekleme
Testlerin, test edilen sistemlerin oluşturulması üzerinde hiçbir kontrolü olmadığında, test çiftleri için bileşenleri değiştirmek daha karmaşık hale gelir ve uygulamanızın mimarisinin test edilebilir bir tasarımı izlemesini gerektirir.
Büyük uçtan uca testler bile test çiftleri kullanmaktan yararlanabilir. Örneğin, uygulamanızdaki kullanıcı akışında gezinen enstrümante edilmiş bir kullanıcı arayüzü testi. Bu durumda testinizi hermetik hale getirmek isteyebilirsiniz. Hermetik test, internetten veri getirmek gibi tüm dış bağımlılıkları önler. Bu, güvenilirliği ve performansı artırır.
Uygulamanızı bu esnekliği sağlayacak şekilde manuel olarak tasarlayabilirsiniz ancak uygulamanızdaki bileşenleri test sırasında değiştirmek için Hilt gibi bir bağımlılık ekleme çerçevesi kullanmanızı öneririz. Hilt test kılavuzuna bakın.
Sonraki adımlar
Test stratejileri sayfasında, farklı test türlerini kullanarak üretkenliğinizi nasıl artırabileceğiniz gösterilmektedir.