2008-12-01 16 views
8

Çoğu insanın, NHibernate ile çalışırken SQLite gibi işlem içi veritabanlarına, kendi bellek içi testlerine karşı testlerini yazdığını düşünüyorum. Bunu çalıştırıyorum ve koşuyorum ama ilk testim (NHibernate kullanıyor) her zaman 3-4 saniye sürüyor. Bir sonraki test daha hızlı çalışır.TDD'yi NHibernate ile verimli bir şekilde nasıl yapabilirim?

Eşlemeyi yapmak için FluentNhibernate'i kullanıyorum ancak XML eşleme dosyaları ile aynı zamanlamaları elde ediyorum. Benim için 3-4 saniye gecikme akışımı ciddi şekilde bozar.

TDD ve NHibernate ile çalışmanın önerilen yolu nedir?

ISession'ı asıl sorguları birim sınamayla yapmak mümkün mü ya da bu yalnızca bellek veritabanlarında yapılabilir mi?

+0

Testler 3-4 dakika sürdüğünde bu durum daha da belirgin hale gelir. – bentford

cevap

14

Veritabanı işlemleri gerçekleştirmek için Depo Kalıbı'nı kullanıyorum ve her ne zaman Testlerimi çalıştırdığımda, yalnızca Depoyu Moole (RhinoMocks ile) olan üst düzey testleri çalıştırıyorum.

Depo katmanını ve NHibernate eşleştirmelerini açıkça sınayan ayrı bir testler paketine sahibim. Ve bunlar genellikle üstlerindeki iş ve gui mantığı kadar değişmez.

Bu şekilde

Hala

+1

Bu ayrı testler zaten entegrasyon testleri alanında daha fazladır. Onları otomatikleştirebileceğin güzel ama onları ayrı tutmak güzel.^1 – Mendelt

+0

Evet, nhibernate, sınama her başlattığınızda veritabanını yeniden oluşturduktan sonra bu testleri yapmak çok kolay hale getirir. Bu zaman alır ve NHibernate Testlerim kaç dakika sürecek, ama yine de koşuyorlar ve işlerin ne zaman işe yaramadığını biliyorum. – Tigraine

+0

Sorgu verileri gerektiren veya yabancı anahtar gerektiren işlemi kaydetme yöntemini test etme yöntemiyle ilgili olarak, –

0

İsteğe bağlı yapılandırma özelliklerinde varsayılan bazı değişen denediniz görüyor musunuz? Yavaşlama büyük olasılıkla nhibernate'in kod oluşturma ile yaptığı bazı optimizasyonlarla ilgilidir.

http://nhibernate.info/doc/nh/en/index.html#configuration-optional

Hafıza db bir bir veri katmanı test etmek en hızlı yolu olacak gibi görünüyor. Ayrıca, veri katmanınızı test etmeye başladığınızda, bir birim testinin biraz ötesine geçtiğinizde de görünür.

4

Birim test veri erişim mümkün değildir, iyi test edilmiş DB Katmanı DB vurmak ve asla çok hızlı unittests olsun, ancak entegrasyon testi olabilir de. Birim testlerimden ayrı bir projede veri erişimim için entegrasyon testi oluşturuyorum. Depolarda, haritalamada veya veritabanı şemasındaki bir şeyi değiştirdiğimde (yavaş) bütünleştirme testlerini çalıştırıyorum. Entegrasyon testleri ünite testleriyle karıştırılmadığı için, ünite testlerini rahatsız edilmeden günde yaklaşık 100 kez çalıştırabilirim.

+0

testine ilişkin verileri yüklemek için çok fazla iş olduğunu hayal edebiliyorum. Bunun doğru olduğuna emin değilim. Testleri nasıl yazdığına bağlı. Testleriniz Atomik ise, Bağımsız ve Yalın Sipariş, Intention Revealing, Kurulması ve Hızlı olması. Her anlamda UnitTests vardır. Bakınız: http://codebetter.com/blogs/jeremy.miller/archive/2005/07/20/129552.aspx – maz

+0

Dosya sistemi, veritabanı veya başka bir sistemle etkileşime giren bazı testler bağımsız değildir, bu nedenle bir birim testi değildir. J.Miller'in bununla hemfikir olduğunu biliyorum. Hızlı, 10 saniyede testlerin çalışmasını sağlar. Ne yaparsanız yapın, db entegrasyon testleri ile o hıza ulaşamazsınız. – Paco

+0

Evet, "... dosya sistemi, bir veritabanı veya başka bir sistemle etkileşime girmeyen bağımsızlık testi ..." diye katılıyorum, ama burada bahsettiğim şey bir süreç içi, bellek içi ile karşılaşmaktır. db. Bu, bugün yaptığınız testlerde sahip olabileceğiniz bellek içi herhangi bir nesneden farklı değil. – maz

İlgili konular