2013-07-15 8 views
5

प्रश्न (रों)

  • मैं कैसे EntityFramework 5 के साथ मेरा ASP.NET MVC4 वेब अनुप्रयोग परीक्षण करते हैं?
  • क्या मुझे मोक जैसे मॉकिंग फ्रेमवर्क का उपयोग करना चाहिए?

परिचय

मैं सप्ताह के लिए इस विषय पर शोध किया गया है। मुझे बहुत सारी सामग्री मिली है लेकिन कुछ भी नहीं जो मुझे लगता है कि सवाल पूरी तरह से जवाब देता है। बहुत सारी जानकारी साल पुरानी है और लागू नहीं हो सकती है।मैं अपने वेब एप्लिकेशन के लिए परीक्षण कैसे लिखूं?

मेरी स्थिति

मैं एक MVC4 आवेदन है कि एक एक मौजूदा लेकिन बाहर दिनांकित आवेदन के पुनर्निर्माण के निर्माण कर रहा हूँ। डेटाबेस पहले से मौजूद है (और इसलिए डेटाबेस-पहला दृष्टिकोण), बड़ा है और जटिल है। आदर्श रूप में जो मैं चाहता हूं वह एक नकली "इकाई" ऑब्जेक्ट है जो मेरी मुख्य इकाई वस्तु के समान है लेकिन किसी प्रकार का "मॉक" या इन-मेमोरी डेटाबेस का उपयोग करता है ताकि मैं नकली डेटा का एक गुच्छा उत्पन्न कर सकूं, परीक्षण चला सकूं और प्रतिक्रिया प्राप्त करें। उदाहरण के लिए:

FakeEntities _db = new FakeEntities(); 
// test a controller action 

अब तक ...

क्या मैं इतना समझ में से जहाँ तक मुझे integration testing का उपयोग करना चाहिए। this post by Ladislav Mrnka एकीकरण के अनुसार परीक्षण परीक्षण नियंत्रक कार्यों का अर्थ है और साथ LINQ करने वाली संस्थाओं और LINQ करने वाली वस्तुओं

अगर आप भंडार नकली आप LINQ करने के लिए-वस्तुओं का उपयोग होगा और एक हरे रंग की होगा कम समस्याओं का मतलब परीक्षण लेकिन यदि आप LINQ करने के लिए-संस्थाओं के साथ एप्लिकेशन को चलाने आप एक अपवाद मिल जाएगा

मुझे पता है कि वह क्या मतलब है और मैं मानता हूँ कर सकते हैं - मैं सुनिश्चित करने के लिए मैं हमेशा उपयोग कर रहा हूँ LINQ करने के लिए-संस्थाओं चाहते हैं और वास्तविक (या वास्तविक के करीब) डेटाबेस।

मैंने repository pattern और this blog by linush के बारे में बहुत कुछ पढ़ा है जो मैं कोशिश कर रहा हूं उससे काफी करीब दिखता है। असल में मैंने पहले से ही एक डमी प्रोजेक्ट बनाया है जिसमें मैंने generic repository बनाने का परीक्षण किया है और सफलतापूर्वक एंटीटी फ्रेमवर्क और "मॉक" डीबीकॉन्टेक्स्ट का उपयोग किया है जो इन-मेमोरी ऑब्जेक्टसेट पर निर्भर था।

इस दृष्टिकोण के साथ मेरी समस्या

  1. जैसा कि ऊपर है, इसका मतलब है मैं उपयोग कर रहा हूँ LINQ करने के लिए-वस्तुओं के बजाय LINQ करने के लिए-संस्थाओं
  2. मेरे वेब अनुप्रयोग संग्रहित का भारी इस्तेमाल पर निर्भर करेगा प्रक्रियाएं

सारांश उत्तर से पहले

  • MVC4, EF5 और SQL सर्वर (हालांकि मैं somewh रहने के लिए करना चाहते हैं नास्तिक डेटाबेस) तर्क है कि SQL संग्रहित प्रक्रियाओं
  • LINQ करने के लिए-संस्थाओं का उपयोग परीक्षण करने के लिए
  • की क्षमता पर
  • डाटाबेस-पहले दृष्टिकोण
+4

सिर्फ 50 प्रतिनिधि !!!!!! प्रयास करें बढ़ती 0 के –

+0

[Compuware AJAX संस्करण वेब प्रदर्शन का विश्लेषण और डिबगिंग उपकरण] (http://www.compuware.com/en_us/application-performance-management/products/ajax-free-edition/Capabilities.html) –

उत्तर

1

आपका प्रश्न ही विरोधाभासों से भरा है। उदाहरण के लिए, आप कहते हैं कि संग्रहित प्रक्रियाओं का परीक्षण करना महत्वपूर्ण है, लेकिन आप डेटाबेस अज्ञेयवादी भी बनना चाहते हैं। इनमें से कौनसा?

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

इसके बाद आप क्या आप परीक्षण करना चाहते हैं कर रहे हैं तय करने के लिए की जरूरत है। यदि आप अपने नियंत्रकों के आस-पास यूनिट परीक्षण लपेट रहे हैं, तो सुनिश्चित करें कि आप अपने नियंत्रकों को टेस्ट करने योग्य मानते हैं। चूंकि आप खरोंच से शुरू कर रहे हैं, यह करना आसान होना चाहिए। नकली कार्यान्वयन के लिए अपनी कार्यक्षमता के कुछ हिस्सों को स्वैप करना आसान बनाने के लिए इंजेक्शन जैसी अवधारणाओं का उपयोग करें। ऑब्जेक्ट्स का एक सेट बनाने के लिए एक नकली ऑब्जेक्ट फ्रेमवर्क (जैसा आपने पाया) का उपयोग करें जिसे आप परीक्षण करने वाले नियंत्रक को पास करते हैं। यदि आप अपने दम पर अपने नियंत्रकों का परीक्षण कर सकते

उपरोक्त सभी अच्छा है। लेकिन अगर आप डेटाबेस संग्रहित प्रक्रियाओं नियंत्रकों और विचारों के साथ गहराई से बातचीत के साथ एक उच्च अन्योन्याश्रित ढेर निर्माण कर रहे हैं, तो यह अच्छी तरह से काम नहीं हो रहा है। या तो अपने दृष्टिकोण को फिर से डिजाइन करें ताकि इकाई परीक्षण संभव हो या कार्यात्मक परीक्षण में स्थानांतरित हो।

Selenium वेब अनुप्रयोगों के लिए सबसे अच्छा जाना जाता है और इस्तेमाल किया कार्यात्मक परीक्षण वातावरण में से एक है। आप पूरे सिस्टम को अंत से अंत तक जांच सकते हैं। इससे भी बेहतर, आप अपने मौजूदा पुराने एप्लिकेशन के आसपास सेलेनियम परीक्षण लिखना शुरू कर सकते हैं, और फिर सुनिश्चित कर सकते हैं कि नया कार्यान्वयन आपके पुनर्लेखन के दौरान समान सुविधाओं को पुन: उत्पन्न करता है। इतने सारे सवालों के लिए

1

मैं कैसे Unit Of Work और Repository Pattern उपयोग करने के लिए दोनों के साथ के बारे में दो लेख लिखा था LINQ और इकाई फ्रेमवर्क। परीक्षण/मजाक करने की बात आती है तो एक शानदार तरीका। उन पर एक नज़र डालें।

http://gaui.is/how-to-mock-the-datacontext-entity-framework/

http://gaui.is/how-to-mock-the-datacontext-linq/

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