Kod tabanınızda bir yerde, uzak DB'ye bağlanma fiili eylemini gerçekleştiren bir kod satırı vardır. Bu kod satırı, 10'da 9 kez, dilinize ve ortamınıza özgü çalışma zamanı kitaplıkları tarafından sağlanan "yerleşik" bir yöntemdir. Bu nedenle, "sizin" kodunuz değildir ve bu nedenle test etmeniz gerekmez; Birim testi için, bu yöntem çağrısının doğru şekilde çalışacağına güvenebilirsiniz. Ünitenizin test takımında hala test edebilecekleriniz ve test etmeniz gerekenler, bu çağrı için kullanılacak parametrelerin sağlanması gibi olmasını beklediğiniz şeylerdir, örneğin bağlantı dizgisinin doğru olduğundan emin olmak veya saklı yordam adı.
Bu, ünite testlerinin çalışma zamanlarını "sanal alanını" terk etmemeleri ve dış duruma bağlı olmalarının kısıtlanmasının ardındaki amaçlardan biridir. Aslında oldukça pratik; Birim testinin amacı, yazdığınız kodun (veya TDD'de yazmak üzere olan) düşündüğünüz gibi davrandığını doğrulamaktır . Yazmadığınız kod, örneğin veritabanı işlemlerinizi gerçekleştirmek için kullandığınız kitaplık, herhangi bir ünite testinin bir parçası olmamalıdır, çünkü yazmamış olmanızın çok basit bir nedeni var.
Senin içinde entegrasyon test paketi, bu kısıtlamaların yapılması hoş karşılanmaz. Şimdi yapabilirsinyazdığınız kodun yapmadığınız kodla iyi çalışmasını sağlamak için veritabanına dokunan testler tasarlayın. Bununla birlikte, bu iki test takımı ayrı tutulmalıdır, çünkü birim test takımınız ne kadar hızlı çalışırsa çalışsın (geliştiriciler tarafından kodları hakkında yapılan tüm iddiaların hala geçerli olduğunu doğrulayabilirsiniz) dış kaynaklara eklenen bağımlılıklar nedeniyle büyüklük sırasına göre daha yavaştır. Build-bot'un tam entegrasyon paketinizi birkaç saatte bir çalıştırmasına izin verin, harici kaynakları kilitleyen testleri uygulayın, böylece geliştiriciler bu aynı testleri yerel olarak uygulayarak birbirlerinin ayaklarına basmazlar. Ve eğer yapı bozulursa, ne olmuş? Yap-bot'un asla bir yapıda başarısız olması gerektiğinden daha fazla başarısız olmamasını sağlamak için çok daha fazla önem verilir.
Şimdi, buna ne kadar sıkı sıkıya bağlı kalabileceğiniz, veritabanına bağlanma ve sorgulama için tam stratejinize bağlıdır. ADO.NET'in SqlConnection ve SqlStatement nesneleri gibi "çıplak kemikleri" veri erişim çerçevesini kullanmanız gereken birçok durumda, sizin tarafınızdan geliştirilen tüm bir yöntem yerleşik yöntem çağrıları ve veritabanı bağlantısı ve bu durumda yapabileceğiniz en iyi şey, tüm işleviyle alay etmek ve entegrasyon test paketlerinize güvenmektir. Ayrıca, sınıflarınızı test amaçlı olarak belirli kod satırlarının değiştirilmesine izin verecek şekilde nasıl tasarlayacağınıza da bağlıdır (Tobi'nin "kısmi alaylara izin verdiği için iyi bir şablon olan Şablon Yöntemi modelinin önerisi gibi)
Veri kalıcılık modeliniz veri katmanınızdaki (tetikleyiciler, depolanan işlemler vb. Gibi) koda dayanıyorsa, yazdığınız kodu egzersiz yapmak için veri katmanının içinde yaşayan ya da kodları aşan testler geliştirmekten başka bir yol yoktur. Çalışma zamanınız ve DBMS arasındaki sınır. Bir temizlikçi, bu nedenle, bu nedenle, bir ORM gibi bir şey lehine kaçınılması gerektiğini söyleyecektir. O kadar ileri gideceğimi sanmıyorum; dile entegre edilmiş sorgular ve diğer derleyici tarafından kontrol edilen, etki alanına bağlı kalıcılık işlemlerinde bile, veritabanını yalnızca saklı yordamla maruz kalan işlemlere kilitlemenin değerini görüyorum ve elbette bu tür saklı yordamlar otomatikleştirilmiş kullanarak doğrulanmalıdır. testleri. Ancak, bu tür testler birim testleri değildir . Onlar entegrasyondur testleri.
Bu ayrımla ilgili bir probleminiz varsa, genellikle "kod kapsamı" aka "birim test kapsamı" konusuna büyük önem verilir. Kodunuzun her satırının bir birim testi tarafından kapsandığından emin olmak istiyorsunuz. Yüzünde asil bir hedef var, ama ben diyorum ki; Bu zihniyet, kendisini uygulayan ancak egzersiz yapmayan iddiasız testler yazmak gibi, bu özel durumun çok ötesine uzanan anti-kalıplara borç verir.senin kodun. Bu tür son çalışmalar yalnızca kapsam sayıları uğruna, minimum kapsamınızı gevşetmekten daha zararlıdır. Kod tabanınızın her satırının bazı otomatik testlerle çalıştırıldığından emin olmak istiyorsanız, bu kolaydır; Kod kapsamı ölçümlerini hesaplarken entegrasyon testlerini dahil edin. Hatta bir adım daha ileri gidebilir ve bu tartışmalı "Itino" testlerini izole edebilirsiniz ("Sadece adında entegrasyon") ve ünite test grubunuz ile bu entegrasyon testlerinin alt kategorisi (hala oldukça hızlı çalışmalıdır) arasına girmeniz gerekir. kapsama alanına yakın.