2016-01-28 6 views
17

मैं NUnit3 के साथ टेस्टकेस में अपवादों के लिए कैसे परीक्षण करूं?न्यूटिट 3 में [टेस्टकेस] विशेषता के साथ अपवादों के लिए परीक्षण?

चलो कहते हैं कि मैं एक विधि Divide(a,b) इस प्रकार के रूप में परिभाषित करते हैं:

public double Divide(double a, double b) 
{ 
    if(Math.Abs(b) < double.Epsilon) throw new ArgumentException("Divider cannot be 0"); 
    return a/b; 
} 

मैं NUnit 3.0 परीक्षण मामलों का उपयोग कर इस विधि का परीक्षण करना चाहते हैं, तो हो सकता है मेरे पास है:

[TestCase(-10, 2, -5)] 
[TestCase(-1, 2, -0.5)] 
public void TestDivide(double a, double b, double result) 
{ 
    Assert.That(_uut.Divide(a, b), Is.EqualTo(result)); 
} 

क्या कोई एक टेस्ट केस निर्दिष्ट करने का तरीका जो विभाजन() को ArgumentException फेंकने का कारण बनता है और किसी भी तरह से यह अपेक्षित परिणाम के रूप में होता है, उदाहरण के लिए की तर्ज पर कुछ:

[TestCase(-10, 2, -5)] 
[TestCase(-1, 2, -0.5)] 
[TestCase(-1, 0, ExpectedResult = TypeOf(ArgumentException)] 
public void TestDivide(double a, double b, double result) 
{ 
    Assert.That(_uut.Divide(a, b), Is.EqualTo(result)); 
} 

(बेशक मैं एक अलग परीक्षण विधि निर्धारित कर सकते हैं और इस में Assert.Throws() उपयोग करते हैं, तो यह विशुद्ध रूप से जिज्ञासा से बाहर है)

उत्तर

20

ExpectedException NUnit के लिए सही विधि हो गया होता 2.X, लेकिन इसे NUnit से हटा दिया गया था 3.

NUnit Google Group और समकक्ष देव समूह में चर्चा के विभिन्न स्निपेट हैं - लेकिन ऐसा लगता है कि यह निर्णय लिया गया था कि यह आम तौर पर अपेक्षित परिणामों का परीक्षण करने के लिए एक बेहतर डिजाइन पैटर्न है , और अलग तरीकों में अपवाद। (link)

एनयूनीट 3 में ऐसा करने का एकमात्र तरीका, इसे दो अलग-अलग परीक्षणों में तोड़ना होगा। (एक समान प्रश्न NUnit कोर टीम द्वारा दिए में पुष्टि की गई, here।)

[TestCase(-10, 2, -5)] 
[TestCase(-1, 2, -0.5)] 
public void TestDivide(double a, double b, double result) 
{ 
    Assert.That(_uut.Divide(a, b), Is.EqualTo(result)); 
} 

[TestCase(-1, 0)] 
public void TestDivideThrows(double a, double b) 
{ 
    Assert.That(() => _uut.Divide(a, b), Throws.TypeOf<ArgumentException>()); 
} 
+1

तुम सच में एक भी टेस्ट केस में दो मजबूर करने के लिए करना चाहता था, तो आप एक बूलियन throwsException तर्क जोड़ सकते हैं और यह परीक्षण कर सकते हैं। हालांकि, अगर एक - फिर - और दो पूरी तरह से अलग उम्मीदों की उपस्थिति साबित होगी कि यह वास्तव में दो अलग-अलग परीक्षण होना चाहिए। – Charlie

+1

एक स्थिर विधि कॉल का उपयोग करते समय निचला वाक्यविन्यास मेरे सिस्टम (NUnit 3.2.1) पर काम नहीं कर रहा है ... - मजाकिया पर्याप्त, 'Assert.Throws (() => MyStaticClass.MyStaticMethod (Badparameter)) काम करता है – ChriPf

+0

धन्यवाद @ChriPf - मुझे लगता है कि यह एक func होना चाहिए। मैंने इसे संपादित किया है। – Chris

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