10

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

ईएफ में सीआरयूडी परिचालन, सभी चीजों का परीक्षण किया जाएगा? (DbContext, SaveChanges() ... परीक्षण करने की आवश्यकता है?)

तो कोई विचार एंटिटी फ्रेमवर्क आधारित घटकों के साथ इकाई परीक्षण कैसे करें? (मैं इन सभी को विजुअल स्टूडियो 2012, एएसपी.नेट एमवीसी 4 में देख रहा हूं)

+2

बस एक एफवाईआई: इन्हें आम तौर पर एकीकरण टेस्ट के रूप में जाना जाता है। अगर वे यूनिट टेस्ट थे .. आप हर 30 सेकेंड में "रन टेस्ट .." मार रहे होंगे (जैसे कि आप टीडीडी में होना चाहिए) और प्रत्येक टेस्ट के लिए डेटाबेस में राउंडट्रिप आपके परीक्षण मिनट/घंटे के लिए चलाएगी। एकीकरण टेस्ट जो वास्तव में अन्य प्रणालियों के साथ एकीकृत होते हैं, वे प्री-रिलीज चलाते हैं। –

+0

@ सिमॉन व्हाइटहेड: तो हम रिपोजिटरी पैटर्न का उपयोग क्यों करते हैं, क्या इसकी आवश्यकता है और – neel

+0

को फोकलने के बीच क्या अंतर है * उसके बाद मैं सीआरयूडी ऑपरेशंस का परीक्षण करना चाहता हूं * आप सीआरयूडी परिचालन से जुड़े अपने तर्क का परीक्षण करना चाहते हैं, या आप परीक्षण करना चाहते हैं इकाई फ्रेमवर्क? –

उत्तर

5

ईएफ कार्यक्षमता का परीक्षण करने के लिए मैं ज्ञात डेटा के खिलाफ एकीकरण परीक्षण लिखने की सलाह देता हूं।

  • भागो का चयन कार्यक्षमता

    1. सम्मिलित जाना जाता डेटा:

      पूर्व: एक आम दृष्टिकोण अपने चयन के आधार कार्यक्षमता का परीक्षण करने के लिए एक पूर्व शर्त के रूप परीक्षण के हिस्से के रूप में डेटा का निर्माण करना है ज्ञात डेटा के खिलाफ

    2. जोर परिणाम

    उपर्युक्त चरण आपके प्रश्नों और ईएफ बाइंडिंग/मॉडल दोनों का परीक्षण करेंगे।

    ईएफ से लौटाए गए डेटा पर कार्य करने वाले व्यवसाय तर्क को मॉकिंग के माध्यम से ईएफ तर्क को सारणीबद्ध करना चाहिए। यह आपको यूनिट परीक्षणों को लिखने में सक्षम करेगा जो एकीकरण बिंदु/डेटा निर्भरताओं के बारे में चिंता किए बिना केवल तर्क का परीक्षण करने के लिए foucs।

  • +1

    बस एक संभावित बिंदु जोड़ने के लिए 4. एक लेनदेन में प्रत्येक परीक्षण को समाहित करें जिसे आप अंत में वापस रोल करते हैं - इस तरह आप टेस्ट रन –

    2

    आप इसके बजाय इन-मेमोरी डेटाबेस के साथ अपने ईएफ मॉडल का परीक्षण भी कर सकते हैं। यूनिट परीक्षणों के लिए डेटाबेस के रूप में प्रयास का उपयोग करने के Here is an example

    +0

    के बाद अपना डीबी साफ़ छोड़ देते हैं लिंक लिंक मर चुका है –

    5

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

    exsample के साथ स्पष्टीकरण के लिए बस Here पर जाएं।

    16

    चलें कहते हैं कि तुम है 2 परत समाधान

    MyApp.Web

    MyApp.Data

    अपने डेटा परत में आप कुछ इस तरह होगा:

    public class ProductsRepository : IProductsRepository 
    { 
        public List<Product> GetAll() 
        { 
         //EF stuff 
         return _dbcontext.Products; 
        } 
    } 
    

    जहां आईपीप्रोड्स रिपोजिटरी

    है
    public interface IProductsRepository 
    { 
        List<Product> GetAll(); 
    } 
    

    MyApp.Web में यह रुझान करना है।

    public class ProductsController : Controller 
    { 
        private readonly IProductsRepository _productsRepository; 
        public ProductsController(IProductsRepository productsRepository) 
        { 
         _productsRepository = productsRepository; 
        } 
    
        public ActionResult Index(int page=1) 
        { 
         var allProducts = _productsRepository.GetAll(); 
    
         return View(allProducts) 
        } 
    } 
    

    कौन कार्यावधि में निर्माता में ProductsRepository में डालता है? लोग इसके लिए निर्भरता इंजेक्शन जैसे निदान फ्रेमवर्क का उपयोग करते हैं। पर क्यों? क्योंकि यह उन्हें नकली ProductsRepository करने के लिए और इस

    public class FakeProductsRepository : IProductsRepository 
    { 
        public List<Product> GetAll() 
        { 
         return new List<Product> 
          { 
           new Product { Name = "PASTE" } 
           new Product { Name = "BRUSH" } 
          }, 
        } 
    } 
    

    और फिर इकाई परीक्षण इस

    [TestMethod] 
    public void IndexGetsAllProducts() 
    { 
         //Arrange 
         var fakeProductRepo = new FakeProductsRepository(); 
         var productsController = new ProductsController(fakeProductRepo); 
    
         //Act 
         var result = productsController.Index(1) as ViewResult; 
    
         //Assert 
         var model = result.Model as List<Product>; 
         Assert.AreEqual(2, model.Count); 
    } 
    

    अनिवार्य रूप से की तरह नियंत्रक की तरह सक्षम बनाता है आप डेटाबेस तो इकाई परीक्षण है faking हैं डेटाबेस के तेज़ और स्वतंत्र। कभी-कभी लोगों को मॉकिंग फ्रेमवर्क जैसे Moq का उपयोग करने के लिए, जो अनिवार्य रूप से वही काम करता है।

    यदि आप उत्पाद रिपोजिटरी का परीक्षण करना चाहते हैं तो इसे अब यूनिट परीक्षण नहीं कहा जाता है क्योंकि यह बाहरी स्रोत पर निर्भर करता है। उन लोगों का परीक्षण करने के लिए आप अनिवार्य रूप से Entityframework का परीक्षण कर रहे हैं।

    यूनिट परीक्षणों के संयोजन में लोग स्पीकफ्लो जैसे ढांचे का उपयोग करके एकीकरण परीक्षण करते हैं। अनिवार्य रूप से आप उत्पाद नियंत्रक को वास्तविक उत्पाद रिपोजिटरी के साथ तुरंत चालू कर सकते हैं और परिणामों को वापस देख सकते हैं।

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