Şu anda bir ASP.Net MVC uygulaması için temel hazırlığı yapıyorum ve ne tür birim testleri yazmaya hazırlanacağımı araştırıyorum. İnsanların temelde 'görüşlerinizi sınama zahmetine girmeyin, mantık yok ve önemsiz ve bir entegrasyon testiyle kaplanacak' diyen birçok yerde gördüm.
Bunun nasıl kabul edilen bir bilgelik haline geldiğini anlamıyorum. Entegrasyon testleri, birim testlerinden tamamen farklı bir amaca hizmet eder. Bir şeyi kırarsam, entegrasyon testlerim ne zaman kesilirse yarım saat sonra bilmek istemiyorum, hemen bilmek istiyorum.
Örnek Senaryo: Diyelim ki Müşteri varlığına sahip standart bir CRUD uygulamasıyla uğraşıyoruz. Müşterinin bir adı ve adresi var. Her test düzeyinde, Müşteri erişim mantığının hem adı hem de adresi doğru aldığını doğrulamak istiyorum.
Depoyu test etmek için veritabanına isabet eden bir entegrasyon testi yazıyorum. İş kurallarını test etmek için depoyu alay ettim, iş kurallarına uygun verileri besledim ve beklenen sonuçların geri döndüğünü doğruladım.
Ne yapmak isterim: Kullanıcı Arabirimini test etmek için, iş kurallarını aştım, beklenen müşteri örneğimi hazırladım, görünümü oluşturdum ve görünümün belirlediğim örnek için uygun değerleri içerdiğini doğruladım.
Yapmam gereken şey: Depoyu birim test etmek için bir entegrasyon testi yazıyorum, uygun bir giriş ayarlıyorum, veritabanında gerekli verileri oluşturuyorum, bir tarayıcı açıyorum, müşteriye gidiyorum ve sonuçta ortaya çıkan sayfanın uygun içeriği içerdiğini doğrulıyorum belirttiğim örnek için değerler.
Yukarıda tartışılan iki senaryo arasında örtüşme olduğunun farkındayım, ancak testlerin kurulumu ve yürütülmesi için gereken zaman ve çaba arasındaki temel fark.
Ben (veya başka bir dev) adres alanını görünümden kaldırırsa, entegrasyon testinin bunu keşfetmesini beklemek istemiyorum. Günde birçok kez yapılan bir birim testinde keşfedilmeyi ve işaretlenmesini istiyorum.
Bazı anahtar kavramları kavramadığım hissine kapılıyorum. Birisi MVC görüşünün geçerliliği hakkında derhal test geri bildirimi almak isteğinin neden kötü olduğunu açıklayabilir mi? (veya fena değilse, o zaman söylenen geri bildirimi almanın beklenen yolu değil)
"To unit-test the repository, I write an integration test"
Bir dakika ne? Bu havuzun birim testi değil. Test için otomatikleştiriyorsunuz, ancak test altındaki kod hala DAL ve veritabanını içeriyor. Havuzu test etmek için, iş kurallarınız için olduğu gibi izole etmenizi sağlar.