2008-12-01 23 views
8

ऐसा लगता है कि ज्यादातर लोग एनएचबीरनेट के साथ काम करते समय SQLite जैसे इन-मेमोरी, इन-प्रोसेस डेटाबेस के खिलाफ अपने परीक्षण लिखते हैं। मेरे पास यह चल रहा है और चल रहा है लेकिन मेरा पहला परीक्षण (जो NHibernate का उपयोग करता है) हमेशा निष्पादित करने के लिए 3-4 सेकंड के बीच लेता है। अगला परीक्षण बहुत तेजी से चलता है।मैं एनएचबीर्नेट के साथ कुशलतापूर्वक टीडीडी कैसे कर सकता हूं?

मै मैपिंग करने के लिए FluentNhibernate का उपयोग कर रहा हूं लेकिन एक्सएमएल मैपिंग फ़ाइलों के साथ लगभग उसी समय मिलता है। मेरे लिए 3-4 दूसरी देरी गंभीर रूप से मेरे प्रवाह को बाधित करती है।

टीडीडी और एनएचबीरनेट के साथ काम करने का अनुशंसित तरीका क्या है?

क्या वास्तविक प्रश्नों की जांच करने के लिए आईएसशन को मॉक करना संभव है या क्या यह केवल स्मृति डेटाबेस में किया जा सकता है?

+0

यह परीक्षण तब भी अधिक प्रासंगिक हो जाता है जब परीक्षण चलाने में 3-4 मिनट लगते हैं। – bentford

उत्तर

14

मैं डाटाबेस ऑपरेशंस करने के लिए रिपोजिटरी पैटर्न का उपयोग कर रहा हूं, और जब भी मैं अपना टेस्ट चलाता हूं तो मैं केवल उच्च स्तरीय परीक्षण चलाता हूं जो बस रेपोजिटरी (राइनोमोक्स के साथ) को मॉक करता है।

मेरे पास परीक्षणों का एक अलग सूट है जो स्पष्ट रूप से रिपोजिटरी परत और NHibernate मैपिंग का परीक्षण करता है। और वे आम तौर पर व्यापार और गुई तर्क के रूप में उतना ही नहीं बदलते हैं।

इस तरह मैं बहुत तेजी से UnitTests कि डीबी एक अच्छी तरह से परीक्षण किया डीबी लेयर

+1

वैसे भी वे अलग परीक्षण एकीकरण परीक्षण के दायरे में अधिक हैं। अच्छा है कि आप उन्हें स्वचालित कर सकते हैं लेकिन उन्हें अलग रखना अच्छा है।^1 – Mendelt

+0

हाँ, निबर्ननेट प्रत्येक परीक्षण को शुरू करने पर डेटाबेस को पुन: निर्मित करके उन परीक्षणों को करना बहुत आसान बनाता है। इसमें समय लगता है और मेरे एनएचबीर्नेट टेस्ट को चलाने के लिए लगभग एक मिनट लगते हैं, लेकिन फिर भी, वे दौड़ते हैं और मुझे पता है कि चीजें काम नहीं करतीं। – Tigraine

+0

क्वेरी विधि के बारे में कैसे जांचें जिसके लिए क्वेरी डेटा की आवश्यकता होती है या विदेशी कुंजी आदि की आवश्यकता वाले ऑपरेशन को सहेजते हैं। मैं कल्पना कर सकता हूं कि –

1
+0

दिलचस्प लिंक ... धन्यवाद – bob

+0

कूल लिंक, और वे nHibernate से संबंध रखते हैं, लेकिन सवाल का जवाब देने के लिए विशेष रूप से क्या प्रदान करते हैं? – David

+0

श्रृंखला में वह टीडीडी का उपयोग करता है और इसे क्रिया में दिखाता है। – Webjedi

0

आप वैकल्पिक कॉन्फ़िगरेशन गुण में चूक के कुछ बदल रहा है की कोशिश की है देखते हैं? कोड पीढ़ी के साथ निबर्ननेट के कुछ अनुकूलन से मंदी की संभावना अधिक है।

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

यह स्मृति DB में एक एक आपका डेटा स्तर का परीक्षण करने का सबसे तेज़ तरीका होने जा रहा है की तरह लगता है। ऐसा लगता है कि एक बार जब आप अपनी डेटा परत का परीक्षण करना शुरू कर देते हैं तो आप एक यूनिट टेस्ट के दायरे से थोड़ा आगे बढ़ रहे हैं।

4

इकाई परीक्षण डेटा का उपयोग संभव नहीं है कभी नहीं प्रवेश, और अभी भी मिलता है, लेकिन आप एकीकरण परीक्षण यह कर सकते हैं। मैं अपने यूनिट परीक्षणों से एक अलग परियोजना में अपने डेटा एक्सेस के लिए एकीकरण परीक्षण बनाता हूं। जब मैं रिपॉजिटरीज़, मैपिंग या डेटाबेस स्कीमा में कुछ बदलता हूं तो मैं केवल (धीमी) एकीकरण परीक्षण चलाता हूं। क्योंकि यूनिट परीक्षणों के साथ एकीकरण परीक्षण मिश्रित नहीं होते हैं, फिर भी मैं बिना किसी परेशानी के दिन 100 बार यूनिट परीक्षण चला सकता हूं।

+0

परीक्षण के लिए डेटा लोड करने के लिए बहुत सारे काम हैं, मुझे यकीन नहीं है कि आप इसके बारे में सही हैं। यह वास्तव में इस पर निर्भर करता है कि आप परीक्षण कैसे लिखते हैं। यदि आपके परीक्षण परमाणु हैं, ऑर्डर तत्काल और पृथक, इरादा प्रकट करना, सेटअप करने में आसान और तेज़। वे यूनिटटेस्ट्स के हर भाव में हैं। देखें: http://codebetter.com/blogs/jeremy.miller/archive/2005/07/20/129552।एएसपीएक्स – maz

+0

कुछ परीक्षण जो फ़ाइल सिस्टम, डेटाबेस या किसी अन्य सिस्टम के साथ इंटरैक्ट करते हैं, स्वतंत्र नहीं हैं, इसलिए इकाई परीक्षण नहीं। मुझे पता है कि जे। मिलर उस से सहमत हैं। तेजी से मतलब 10 सेकंड में परीक्षणों के हजारों भागने में सक्षम है। आप जो कुछ भी करते हैं, आप डीबी एकीकरण परीक्षण के साथ उस गति तक नहीं पहुंचेंगे। – Paco

+0

हां, मैं मानता हूं कि "... परीक्षण जो फ़ाइल सिस्टम, डेटाबेस या किसी अन्य सिस्टम के साथ इंटरैक्ट नहीं करता है ..." लेकिन मैं यहां जो बात कर रहा हूं वह एक इन-प्रोसेस, इन-मेमोरी के खिलाफ चलाना है db। यह आपके परीक्षणों में आज के किसी अन्य इन-मेमोरी ऑब्जेक्ट से अलग नहीं है। – maz

संबंधित मुद्दे

 संबंधित मुद्दे