Yakalamaya önceden karar verdiğiniz bir başarısızlık örneği, test edilen nesnenin bir önbellek katmanı kullanması ancak verileri gerektiği gibi sürdürememesidir. Sonra nesneyi sorgularsanız, "evet, yeni ad ve adresim var" der, ancak yapması gerekeni yapmadığı için testin başarısız olmasını istersiniz.
Alternatif olarak (ve tek sorumluluk ihlaline bakmadan), dizenin UTF-8 kodlu bir versiyonunu bayt yönelimli bir alana sürmenin gerekli olduğunu varsayalım, ancak aslında Shift JIS'i devam ettiriyor. Başka bir bileşen veritabanını okuyacak ve UTF-8'i görmeyi beklemektedir, bu nedenle gereksinim vardır. Ardından, bu nesne boyunca gidiş dönüş doğru adı ve adresi bildirebilir çünkü Shift JIS'ten geri çevirir, ancak hata testiniz tarafından algılanmaz. İnşallah daha sonraki bir entegrasyon testi ile tespit edilecektir, ancak birim testlerin amacı, sorunları erken yakalamak ve hangi bileşenin sorumlu olduğunu tam olarak bilmektir.
Eğer onlardan biri yapması gerekeni yapmıyorsa, o zaman kendi test durumu başarısız olur ve onu düzeltip test bataryasını tekrar çalıştırabiliriz.
Bunu üstlenemezsiniz, çünkü dikkatli olmazsanız, karşılıklı olarak bağımlı bir dizi test yazarsınız. "Kurtarıyor mu?" test, test ettiği kaydetme yöntemini ve ardından kaydetme işlemini onaylamak için yükleme yöntemini çağırır. "Yüklüyor mu?" test, test fikstürünü ayarlamak için kaydetme yöntemini ve ardından sonucu kontrol etmek için test ettiği yükleme yöntemini çağırır. Her iki test de, test etmedikleri yöntemin doğruluğuna dayanmaktadır, yani hiçbiri test ettiği yöntemin doğruluğunu test etmez.
Burada bir sorun olduğuna dair bir ipucu, farklı birimleri deneyen iki testin aslında aynı şeyi yaptığıdır . Her ikisi de bir ayarlayıcıyı ve ardından bir alıcıyı çağırır, ardından sonucun orijinal değer olup olmadığını kontrol edin. Ancak, belirleyicinin / alıcı çiftinin birlikte çalıştığını değil, belirleyicinin verileri sürdürdüğünü test etmek istediniz. Yani bir şeylerin yanlış olduğunu biliyorsunuz, sadece neyi bulmanız ve testleri düzeltmeniz gerekiyor.
Kodunuz ünite testi için iyi tasarlanmışsa, verilerin gerçekten test edilen yönteme göre doğru şekilde devam edilip edilmediğini test etmenin en az iki yolu vardır:
veritabanı arabirimini alay edin ve alayınıza uygun işlevlerin üzerinde beklenen değerlerle çağrıldığını kaydedin. Bu, testin yapması gerekeni yapar ve klasik birim testidir.
Verilerin doğru şekilde sürdürülüp sürdürülmediğini kaydetmek için aynı amaca sahip gerçek bir veri tabanını iletin. Ancak, sadece "evet, doğru verileri aldım" diyen alaycı bir işleve sahip olmak yerine, testiniz doğrudan veritabanından okur ve doğru olduğunu onaylar. Bu mümkün olan en saf test olmayabilir , çünkü bir veritabanı motorunun tamamı yüceltilmiş bir taklit yazmak için kullanması oldukça büyük bir şeydir, çünkü bir şeyler yanlış olsa bile bir test geçişi yapan bazı inceliklere bakmam daha fazla (benim için) Taahhüt edilmemiş bir işlem görebildiğim için yazmak için kullanılan ile aynı veritabanı bağlantısını kullanmamalı). Ama doğru olanı test ediyor ve en azından tam olarak bunu biliyorsun. herhangi bir sahte kod yazmak zorunda kalmadan tüm veritabanı arayüzü uygular!
Bu yüzden, test uygulamasının verilerini JDBC tarafından veri tabanından okudum ya da veri tabanını alayıp atamadım. Her iki durumda da, üniteyi, bir şeyler yanlış olsa bile doğru gözükmek için aynı sınıftaki diğer yanlış yöntemlerle fikirleşmesine izin verirsem, izole edebileceğimden daha iyi izole ederek test edebiliyorum. Bu nedenle , yöntemini test ettiğim bileşene güvenmekten başka , doğru verinin devam ettirildiğini kontrol etmek için herhangi bir uygun araç kullanmak istiyorum .
Kodunuz ise değil birim test için iyi tasarlanmış, o zaman, hiçbir seçim olabilir kimin yöntem bir enjekte bağımlılık olarak veritabanını kabul etmeyebilir test etmek istediğiniz nesne çünkü. Bu durumda, test edilen üniteyi izole etmenin en iyi yolu hakkındaki tartışma, test edilen üniteyi izole etmenin ne kadar yakın olacağı üzerine yapılan bir tartışmaya dönüşür. Sonuç olsa aynıdır. Arızalı birimler arasındaki komplolardan kaçınabiliyorsanız, o zaman yaparsınız, uygun zamana ve koddaki hataları bulmakta daha etkili olacağını düşündüğünüz herhangi bir şeye tabidir.