2011-11-03 21 views
11

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

[TestMethod, ExpectedException(typeof(ErrorResponseException))] 
     public void should_throw_exception() 
     { 
      throw new ErrorResponseException(); 
     } 

ErrorResponseException एक वर्ग कि सिर्फ अपवाद से विरासत है, मैं इसे उम्मीद करेंगे:

यहाँ एक सरल उदाहरण मैं इस समस्या को दोहराने के लिए इस्तेमाल किया है है पारित करने के लिए।

उत्तर

14

न्यूटिट में, मैं अपेक्षित अपवाद से बचूंगा और इसके बजाय Assert.Throws (अपवाद आवेषण) का उपयोग करूंगा। यह आपको बेहतर अनाज नियंत्रण देता है। अन्यथा परीक्षण विधि का कोई भी भाग उस अपवाद को फेंक देता है तो परीक्षा उत्तीर्ण होगी।

MSTest में, आप ओल्ड-स्कूल निर्माण के साथ नियंत्रण के समान स्तर मिल सकता है:

try 
{ 
    // code that you expect to throw goes here 
    Assert.Fail("Expected MyException"); 
} 
catch (MyException ex) 
{ 
    // optionally assert on the message - this can make tests fragile though 
} 
इस के साथ

, ExpectedException विशेषता के लिए कोई आवश्यकता नहीं है।

(अवधारणा पुस्तक टेस्ट संचालित विकास से आता है: डेविड Astels द्वारा ए प्रैक्टिकल गाइड।)

+0

मेरा असली परिदृश्य में यह बहुत आप क्या कहते हैं यह इस समय गुजर पाने के लिए के लिए समान है, मैं सिर्फ यह अजीब पाया कि यह एमएसटीएस्ट के भीतर काम नहीं करता है। इस अभ्यास का उपयोग आगे बढ़ते रहेंगे। – Grofit

+3

एमएसटीएस्ट इस ठीक से समर्थन नहीं करता है, यह एक बग है। यह भी सुपर लंगड़ा है! ऊपर कामकाज हालांकि काम करेगा –

3

बेशर्म प्लग, लेकिन मैं एक साधारण विधानसभा कि अपवाद और अपवाद संदेशों थोड़ा आसान और अधिक के लिए जोर देते हुए बनाता लिखा था assert.Throws() वाक्यविन्यास का उपयोग कर एमएसटीएस्ट में पठनीय। मैंने पूर्ण विवरण के साथ blog post लिखा था।

3

यदि आप एमएसटीएस्ट 10.0.1.0.0 का उपयोग कर रहे हैं, तो अपेक्षित अपवाद सही ढंग से काम नहीं कर रहा है, इसके बजाय 10.0.0.0.0 का उपयोग करें।

+1

सच। मुझे अब इस समस्या का सामना करना पड़ रहा है। – orange

2

मुझे बस एक ही समस्या थी और एक और समाधान मिला। परीक्षण करने की मेरी विधि async थी, लेकिन मैं अपने testmethod में कॉल के सामने await कीवर्ड भूल गया था।

टेस्ट:

[TestMethod] 
    [ExpectedException(typeof(InvalidOperationException))] 
    public async Task ShouldDoSomething(){ 
     // notice the missing await in the next line 
     this.testObject.DoSomethingAsync(); 
    } 

विधि परीक्षण करने के लिए:

 public async Task<bool> DoSomethingAsync(){ 
      if(something) 
      { 
       throw new InvalidOperationException("Error while doing something"); 
      } 
      return false; 
     } 

जब मैं इस तरह यह असफल अपने परीक्षण भाग गया। लेकिन जैसे ही मैं निम्नलिखित करने के लिए टेस्ट बदल के रूप में:

[TestMethod] 
[ExpectedException(typeof(InvalidOperationException))] 
public async Task ShouldDoSomething(){ 
    await this.testObject.DoSomethingAsync(); 
} 

यह मेरे लिए काम किया।

0

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

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

मुझे अंततः इसे मेरी परीक्षा परियोजनाओं में इस डीएलएल के सभी संदर्भों को हटाकर टीमसिटी में पारित करने और उन्हें मिरोसॉफ्ट के संस्करण 10.0.0.0 के साथ बदलकर प्राप्त किया गया। विज़ुअल स्टूडियो। क्वालिटीटूल।UnitTestFramework

1
MSTest.TestAdapter v1.1.18 और MSTest.TestFramework v1.1.18 पर निर्भरता के साथ

Visual Studio 15 में आप भी इस्तेमाल कर सकते हैं

Assert.ThrowsException<ArgumentNullException>(() => MethodThatThrowsArgumentNullException());

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