NUnit

2013-01-02 14 views
8

में टेस्टडिलेगेट को पैरामीटर पास करना मैं एक ऐसी विधि बनाने की कोशिश कर रहा हूं जो टेस्ट डिलीगेट या प्रतिनिधि हो और प्रतिनिधि ऑब्जेक्ट को पैरामीटर पास करे। ऐसा इसलिए है क्योंकि मैं नियंत्रकों में एक विधियों के लिए एक परीक्षण तैयार कर रहा हूं कि सभी एक ही पैरामीटर (एक आईडी) लेते हैं, और मैं सभी नियंत्रक विधियों के लिए एक परीक्षण नहीं बनाना चाहता हूं।NUnit

कोड रहा है:

protected void AssertThrows_NullReference_Og_InvalidOperation(TestDelegate delegateMethod) 
{ 

    Assert.Throws<NullReferenceException>(delegateMethod); 
    Assert.Throws<InvalidOperationException>(delegateMethod); 
    Assert.Throws<InvalidOperationException>(delegateMethod); 
} 

मैं चाहते हैं क्या करें:

protected void AssertThrows_NullReference_Og_InvalidOperation(TestDelegate delegateMethod) 
{ 

    Assert.Throws<NullReferenceException>(delegateMethod(null)); 
    Assert.Throws<InvalidOperationException>(delegateMethod(string.Empty)); 
    Assert.Throws<InvalidOperationException>(delegateMethod(" ")); 
} 

संपादित करें: मैं नियंत्रक एक वापसी मूल्य नहीं है उल्लेख करना भूल गया। इसलिए कार्रवाई का उपयोग नहीं किया जा सकता है।

+0

मेरी अद्यतन जवाब –

+1

देखें आप सही कर रहे हैं। मैंने नीचे अपना स्वयं का समाधान जोड़ा है, जिसे मैंने अपना कोड उधार लिया है और कुछ बदलाव किए हैं। आपकी सहायता के लिए धन्यवाद. –

उत्तर

10

एकल स्ट्रिंग पैरामीटर स्वीकार करने वाली विधि को पारित करने के लिए Action<string> का उपयोग करें। अपने परीक्षण मानकों के साथ कि कार्रवाई आह्वान:

protected void AssertThrowsNullReferenceOrInvalidOperation(Action<string> action) 
{ 
    Assert.Throws<NullReferenceException>(() => action(null)); 
    Assert.Throws<InvalidOperationException>(() => action(String.Empty)); 
    Assert.Throws<InvalidOperationException>(() => action(" ")); 
} 

उपयोग:

[Test] 
public void Test1() 
{ 
    var controller = new FooController(); 
    AssertThrowsNullReferenceOrInvalidOperation(controller.ActionName); 
} 

अद्यतन:

उपयोग Func<string, ActionResult> नियंत्रकों जो ActionResult रिटर्न के लिए। इसके अलावा आप उस उद्देश्य के लिए सामान्य विधि बना सकते हैं।

1

जैसा कि संपादन में कहा गया है, नियंत्रक के पास रिटर्न प्रकार है। इसलिए, मुझे एक्शन टू फनक में बदलना पड़ा, और चूंकि मैंने इसे यूनिट टेस्ट में इस्तेमाल किया था, इसलिए मुझे एक अस्थायी ऑब्जेक्ट बनाना था जो फ़ंक्शन रखता था।

lazyberezovsky का जवाब यहाँ मेरी जिसके परिणामस्वरूप कोड है के आधार पर:

public class BaseClass 
    { 
      protected Func<string, ActionResult> tempFunction; 
      public virtual void AssertThrowsNullReferenceOrInvalidOperation() 
      { 
       if (tempFunction != null) 
       { 
        Assert.Throws<NullReferenceException>(() => tempFunction(null)); 
        Assert.Throws<InvalidOperationException>(() => tempFunction(string.Empty)); 
        Assert.Throws<InvalidOperationException>(() => tempFunction(" ")); 
       } 
      } 
    } 

इकाई परीक्षण तो है:

[TestFixture] 
public class TestClass 
{ 
     [Test] 
     public override void AssertThrowsNullReferenceOrInvalidOperation() 
     { 
      tempFunction = Controller.TestMethod; 
      base.AssertThrowsNullReferenceOrInvalidOperation(); 
     } 
}