Bir öğeyi veya öğe sistemini ayrı olarak test edersiniz. Örneğin, bir ViewModel'i test etmek için Android çerçevesine bağlı olmadığından (veya bağlı olmaması gerektiğinden) bir emülatör başlatmanız ve kullanıcı arayüzü açmanız gerekmez.
Ancak test edilen konu, çalışması için başkalarına bağlı olabilir. Örneğin, bir ViewModel'in çalışması için bir veri deposuna ihtiyacı olabilir.
Test edilen bir konuya bağımlılık sağlamanız gerektiğinde yaygın bir uygulama, test çifti (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
Çeşitli test çifti türleri vardır:
Sahte | Sınıfın "çalışan" bir uygulamasına sahip olan ancak testler için iyi ancak üretim için uygun olmayan bir şekilde uygulanmış 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 veriler testleri geçersiz kılar. Tüm bu hedeflere ulaşmak için genellikle taklit çerçevesi ile taklitler oluşturulur.
Örnek: Bir veritabanındaki yöntemin tam olarak bir kez çağrıldığını doğrulayın. |
Stub | Programladığınız şekilde davranan ancak etkileşimleriyle ilgili beklentileri olmayan bir test çifti. Genellikle bir taklit çerçevesi ile oluşturulur. Basitlik açısından, sahte öğeler, taslak öğelere 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 bir sarmalayıcı. Karmaşıklık ekledikleri için genellikle bunlardan kaçınılır. Bu nedenle, casuslara kıyasla sahte veya taklit hesapların kullanılması tercih edilir. |
Gölge | Robolectric'te kullanılan sahte. |
Sahte bir örnek
UserRepository
adlı bir arayüze dayanan ve ilk kullanıcının adını kullanıcı arayüzüne 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
'nin, üretim sürümünün kullanacağı yerel ve uzak veri kaynaklarına bağlı olması gerekmez. 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, birim testinde UserRepository
öğesini sahte bir öğeyle değiştirmek 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 getirme gibi tüm harici bağımlılıklardan kaçınır. 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.