Ünite test senaryoları yazarken neden sahte nesneler yazıyoruz?


11

Şu anda projemizde birim test senaryoları yazıyoruz. Veritabanı yöntemleri için uygulamalar mevcuttur ve iyi çalışır. Bu durumda neden sahte nesneler yazmamız gerekiyor? Bunun belirli bir nedeni var mı? Neden DAO uygulamasını doğrudan test edemiyorum?

Yanıtlar:


6

Veritabanına yapılan çağrıları alay etmemelisiniz, çünkü bu amacı bozar. Alay etmelisiniz, örneğin DAO'nuza, örneğin bir hizmet katmanından gelen çağrılardır. Alay etme yöntemleri izole bir şekilde test etmenizi sağlar.

Diyelim ki böyle bir mimariye sahip bir restoran simülasyonunuz var:

Cook <=> Server <=> Customer

Her katmanı bağımsız olarak test etmek istiyorsunuz. İşte Serversizin hizmet katmanınız ve CookDAO olarak düşünülebilir. ServerEğer test ederken taklit istiyor budur Customerve Cooktest ederken taklidinin istediğiniz şeydir Server. CookBirim testleri, ancak, bir hamburger, bir lastik lastik sipariş ve değilken uygulama bir hamburger dönen doğrulamak gerekir.


3
Bu ifadeye katılmıyorum Veritabanına yapılan çağrıları alay etmemelisiniz, çünkü bu amacı bozar. çünkü çok genel görünüyor. Diğerlerinin aşağıda söylediği gibi, her şeyi ayrı ayrı test etmelisiniz. Birim test ettiğiniz şey veritabanı erişimi ise, yorumunuzun doğru olduğundan emin olun. Birim sınama yaptığınız şey veritabanı erişimi değilse, ilk cümleniz yanlıştır. Söylediğin her şeye katılıyorum. 0. :-)
Peter

6

Veritabanıyla birlikte businesslogic'i test etmek mükemmeldir. ancak bu testleri yürütmek için nunit veya junit veya phpunit kullansanız bile entegrasyon testleri olarak adlandırılır .

Birim testler, izole edilmiş testlerin (yani veri tabanı olmadan buisinesslogic) önemli olduğu spezialize testlerdir. Bu izolasyonu uygulamak için alaylar / sahte / stups kullanılır.


2

Basitçe: veritabanı içeriğini değil, gerçek DAO'yu test etmek.

DAO Person sınıfınızın getByName () yöntemine sahip olduğunu varsayalım. Bir test yazar ve Person.getByName ("John Smith") çağırır. Birisi John'un kaydını veritabanından kaldırdığından testin başarısız olduğunu varsayalım. Artık her CI yazılımı ve amirleriniz / gözden geçirenleriniz gerçekte değil, yazılımınızın hatalı olduğunu iddia edebilirler. DB ile alay ederseniz, DAO'nuzun doğru tablodan doğru satır verildiğinde çalıştığını kanıtlayabilirsiniz.

Veritabanının kendisini gerçekten test etmek istiyorsanız, örneğin: belirli DAO yönteminin yürütülmesi verileri belirli bir duruma getirirse, bu da mümkündür. Dahası, veritabanının kurşun geçirmez bütünlük sağlamasını bekleyemeyeceğiniz tuhaf veri modelleri (EAV, iç içe ağaç seti) ile gerçekten yararlıdır. Hayatınızı kolaylaştırmak için DBUnit'e bir göz atın .


1

Başka bir neden, veritabanı komutlarını çalıştırmanın yürütme süresinden kaçınmaktır. Çok fazla görünmeyebilir, ancak bağlantıları kurma ve yırtma yükü eninde sonunda eklenecek ve büyük olasılıkla, sahte nesneleri kullanmaya kıyasla test paketini çalıştırmak için toplam süreyi önemli ölçüde artıracaktır.


0

Sınıfı izole etmek için test ediyorsunuz. Ya da test başarısız olursa, sorunun test ettiğiniz sınıfta ya da bağımlılıklarından birinde olduğunu nasıl bilirsiniz.


DAO implentasyonunda yöntemleri doğrudan çağırıyor ve test ediyor musunuz?
Vinoth Kumar CM
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.