2012-11-21 34 views
42

के साथ सत्यापित करें मैं कक्षा के पैरामीटर को सत्यापित करने का प्रयास कर रहा हूं। परीक्षण किया जा रहा कोड ठीक है। बग परीक्षण में है।Moq ऑब्जेक्ट पैरामीटर

मैंने दो विधियों की कोशिश की है, जिनमें से दोनों विफल हो गए हैं। ,

this.MockImageResizeFilter.Verify(m => m.Filter(this.UploadedFileData, new ImageFilterOptions() 
    { 
     Width = 256, 
     Height = 256, 
    })); 

यह हमेशा विफल रहता है, भले ही एक वस्तु दूसरा पैरामीटर के रूप में पारित बराबर गुण है:

1:

यहाँ मेरी प्रयास कर रहे हैं। पहला पैरामीटर ठीक से सत्यापित है।

2:

this.MockImageResizeFilter.Setup(m => m.Filter(It.IsAny<byte[]>(), It.IsAny<ImageFilterOptions>())) 
    .Callback<byte[], ImageFilterOptions>((data, options) => 
     { 
      Assert.AreEqual(this.UploadedFileData, data, "data"); 
      Assert.AreEqual(filterOptions.Width, options.Width, "Width"); 
      Assert.AreEqual(filterOptions.Height, options.Height, "Height"); 
     } 
    ); 

यह हमेशा से गुजरता है, तो यह और भी जब असफल चाहिए। कॉलबैक में आवेषण विफल हो जाते हैं, लेकिन अपवाद बाहरी संदर्भ में पारित नहीं होता है, और इस प्रकार परीक्षण हमेशा गुजरता है।

क्या आप मुझे यह जानने में मदद कर सकते हैं कि मैं क्या गलत कर रहा हूं?

उत्तर

66

पहला प्रयास आप जो हासिल करना चाहते हैं उसके करीब है।

कारण यह विफल रहता है कि Moq (शायद) Object.Equals आड़ में उपयोग करता है, तो ImageFilterOptions पैरामीटर है कि विधि के साथ बुलाया गया था एक आप Verify करने के लिए कॉल में आपूर्ति के रूप में ही उदाहरण है परीक्षण करने के लिए है।

उनके लिए एक ही उदाहरण होना असंभव है, क्योंकि Verify में आप new ImageFilterOptions() बनाते हैं।

इसके बजाय पैरामीटर इस तरह से जाँच प्रदर्शन करने के लिए, आप Moq के It.Is सिंटैक्स का उपयोग एक अभिव्यक्ति है कि पैरामीटर उम्मीद थी एक की पुष्टि करता है प्रदान करने के लिए कर सकता है।

आपके मामले में, आप जांच करने के लिए कि पैरामीटर प्रकार ImageFilterOptions की है और दोनों Width और Height256 की तैयारी में हैं कि चाहते हैं। अभिव्यक्ति है कि आपको लगता है कि ऐसा करने के लिए अनुमति देता है:

It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256) 

तो, Verify करने के लिए अपने कॉल ऐसा दिखाई दे सकता: पर

this.MockImageResizeFilter.Verify(m => m.Filter(
      this.UploadedFileData, 
      It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256))); 
+0

स्पॉट है, धन्यवाद! – rhughes

+1

मुझे जिस वाक्यविन्यास का उपयोग करना था, वह होगा: 'यह। ((ImageFilterOptions p) => p.Width == 256 && p.Height == 256) '। कोई सामान्य 'Is' – Nemo1024

+0

सामान्य संस्करण मेरे लिए काम करता है और एपीआई दस्तावेज़ों में है http://www.nudoq.org/#!/Packages/Moq/Moq/It/M/Is(TValue) - क्या आप हैं Moq के पुराने संस्करण का उपयोग कर? –