2011-03-29 14 views
7

के साथ गतिशील का उपयोग करके मैंने लोगों के यहां कुछ प्रश्न देखे हैं जो उनके यूनिट परीक्षणों की आलोचना मांग रहे हैं। मुझे लगता है कि उन्हें बंद नहीं हुआ है, इसलिए मैं वही करना चाहता हूं।यूनिट टेस्ट

मैंने इन परीक्षणों को मार दिया, जो मुझे लगता है कि dynamic का उपयोग कर अधिक पठनीय बनाया गया है, लेकिन मैं सोच रहा था कि एसओ समुदाय में किसी को भी कुछ जोड़ने के लिए कुछ भी था।

मुझे पता है कि गतिशीलता का उपयोग कुछ कारणों से बहुत विवादास्पद है, और किसी कारण से सी # डेवलपर्स के बीच धार्मिक युद्ध शुरू होता है। मैं वास्तव में उस से बचने की उम्मीद कर रहा हूं; मैं तो बस मुझे मेरा काम :)

[TestMethod] 
    public void TestAllocation() { 
     SearchView.StubPropertyNumValueThenSetUpSearchView<WellDetail>("TX", Property.WorkingInterestTaxSubtypeId); 
     Presenter.SetUpPhaseAndFmvValues(Phase.PhaseIdForForRenderAppraiser, 1000); 

     AddTheseItems(
      new { PropNum = "pn1", CAN = "can1", MostRecentFmv = 10 }, 
      new { PropNum = "pn1", CAN = "can1", MostRecentFmv = 10 }, 
      new { PropNum = "pn1", CAN = "can1", MostRecentFmv = 10 }, 
      new { PropNum = "pn1", CAN = "can1", MostRecentFmv = 10 }, 

      new { PropNum = "pn1", CAN = "can2", MostRecentFmv = 40 }, 
      new { PropNum = "pn1", CAN = "can2", MostRecentFmv = 40 }, 
      new { PropNum = "pn1", CAN = "can2", MostRecentFmv = 40 }, 

      new { PropNum = "pn2", CAN = "can1", MostRecentFmv = 50 }, 
      new { PropNum = "pn2", CAN = "can1", MostRecentFmv = 50 }); 

     Presenter.Process(SearchView, ItemsToProcess); 

     AssertTheseItemsExist(
      new { NumberOfTimes = 4, PropNum = "pn1", CAN = "can1", FmvCalculated = 100 }, 
      new { NumberOfTimes = 3, PropNum = "pn1", CAN = "can2", FmvCalculated = 400 }, 
      new { NumberOfTimes = 2, PropNum = "pn2", CAN = "can1", FmvCalculated = 500 }); 
    } 

    private void AddTheseItems(params dynamic[] MassUpdateDtos) { 
     foreach(dynamic item in MassUpdateDtos) 
      ItemsToProcess.Add(new MassFMVUpdateDTO(new WellDetail() { PropertyNum = item.PropNum, CountyAccountNum = item.CAN }, new FMVHistory(), 0, item.MostRecentFmv)); 
    } 

    private void AssertTheseItemsExist(params dynamic[] uniqueTargets) { 
     foreach (dynamic target in uniqueTargets) 
      Assert.AreEqual(target.NumberOfTimes, ItemsToProcess.Count(f => f.PropertyNum == target.PropNum && f.CountyAccountNum == target.CAN && f.FMV == target.FmvCalculated)); 
    } 
+0

आपके मामले में 'गतिशील' का उपयोग करने का क्या फायदा है? –

+0

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

+2

@ डैनियल मुझे लगता है कि यह सिर्फ परीक्षणों को और अधिक पठनीय बनाता है; यह उन प्रासंगिक डेटा टुकड़ों पर केंद्रित है जो प्रासंगिक हैं। AddTheseItems विधि से पता चलता है कि अगर मैं उचित, स्थैतिक रूप से टाइप की गई वस्तुओं (आईएमओ) का उपयोग करना चाहता हूं तो परीक्षण कैसे फहराया जाएगा। –

उत्तर

2

ज़रूर गतिशील के उपयोग कोड की पंक्तियों उपयोग करने की आवश्यकता कम कर देता है ऐसा करने में सहायता करने के लिए कुछ अच्छा परीक्षण लिखने की कोशिश कर रहा हूँ। लेकिन पहले यूनिट परीक्षणों से आप जो चाहते हैं उसके बारे में सोचें। आप चाहते हैं कि वे आपको बताएं कि आपका कोड गलत कहां जाता है।

यदि आपके द्वारा जोड़े गए डेटा की पंक्तियों में से कोई एक गलत है, तो क्या यह आपको बताएगा कि कौन सा विफल रहा? और यदि कोई दावा विफल रहता है, तो क्या यह आपको बताएगा कि कौन सा?

जब तक आप अपनी आवश्यक जानकारी प्राप्त कर सकें, तो आपको ठीक होना चाहिए। तो यह बिल्कुल बताएगा कि क्या गलत हुआ और जब यह हुआ।

+0

+1 यह एक अच्छा मुद्दा है। मैं जो कह सकता हूं उससे न तो मैं अब यह कैसे कर सकता हूं, न ही यह कैसे होगा यदि मैं गतिशील से बचने के लिए सरल कक्षाओं में जोड़ा गया तो मुझे बताएगा कि किस पंक्ति ने विफलता का कारण बनता है। मेरे लिए मैं उम्मीद करता हूं कि परीक्षा पास होने की अपेक्षा से कहीं अधिक हो जाएगी, इसलिए मुझे लगता है कि अगर मैं कभी भी अपने कोड को दोबारा प्रतिक्रिया देता हूं तो परीक्षण में तोड़ सकता है। क्या यह सभ्य तर्क की तरह लगता है? –

+0

बिल्कुल, आप यूनिट परीक्षणों को भी बग का पता लगाते हैं, जब वे ऐसा करते हैं कि आप उन्हें बग कहां दिखाना चाहते हैं। – MrFox

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