2012-05-30 12 views
8

parameterized को मैं अतिभारित ऑपरेटरों के एक समूह के साथ एक वर्ग है:पास लैम्ब्डा NUnit परीक्षण

public static double[,] operator +(Matrix matrix, double[,] array) 
public static double[,] operator -(Matrix matrix, double[,] array) 
public static double[,] operator *(Matrix matrix, double[,] array) 

उन सभी को मैं अशक्त के लिए ऑपरेंड परीक्षण करना चाहते हैं के लिए। मुझे लगता है कि के लिए एक NUnit परीक्षण है:

public void MatrixOperatorOperandIsNullThrows(Func<Matrix, double[,], double[,]> op) 
{ 
    Matrix m = null; 
    var right = new double[,] {{1, 1}, {1, 1}}; 
    Assert.Throws<ArgumentException>(() => op(m, right)); 
} 

मैं (l,r) => l + r तरह प्रत्येक ऑपरेटर के लिए एक लैम्ब्डा कैसे पारित कर सकते हैं?

उत्तर

1

आप पास कर सकते हैं वास्तव में है कि:

MatrixOperatorOperandIsNullThrows((l,r) => l + r); 
+0

जहां मैं इसे कॉल करना बेहतर होगा? 'TextFixture' के निर्माता में? मैं परीक्षण चलाने के लिए एक रिशेर्पर का भी उपयोग करता हूं। क्या यह उन्हें इस तरह से संभाल सकता है? –

+0

@AndreyErmakov: प्रति ऑपरेटर एक अलग परीक्षण विधि में। – SLaks

20

आप तुरंत testcase एक लैम्ब्डा अभिव्यक्ति युक्त विशेषता, लागू नहीं कर सकते यानी निम्न परीक्षण को अमान्य घोषित किया जाएगा:

[TestCase((a, b) => a + b)] 
public void WillNotCompileTest(Func<double, double, double> func) 
{ 
    Assert.GreaterOrEqual(func(1.0, 1.0), 1.0); 
} 

आप क्या कर सकते हैं, फिर भी , आपके लैम्ब्डा एक्सप्रेशन के आईनेमरेबल के साथ टेस्टकेससोर्स एट्रिब्यूट का उपयोग करना है, जैसे:

[TestFixture] 
public class TestClass 
{ 
    private IEnumerable<Func<double, double, double>> TestCases 
    { 
     get 
     { 
      yield return (a, b) => a + b; 
      yield return (a, b) => a * b; 
      yield return (a, b) => a/b; 
     } 
    } 

    [TestCaseSource("TestCases")] 
    public void Test(Func<double, double, double> func) 
    { 
     Assert.GreaterOrEqual(func(1.0, 1.0), 1.0); 
    } 
} 
+0

इस काफी उपयोगी दृष्टिकोण के लिए धन्यवाद। मैंने चुना है कि @ एसएलक्स प्रदान किया गया क्योंकि यह मुझे प्रत्येक ऑपरेटर के लिए परीक्षण समूह में मदद करने में भी मदद करता है। –

+0

क्या होगा अगर मैं केवल एक समारोह न केवल अन्य तर्क पारित करना चाहता हूं? –

+0

आप एक वर्ग बना सकते हैं जो संपत्ति एक Func है, फिर अन्य गुण बनाएं जो उम्मीदें हैं। अंत में आप अपनी नई कक्षा का एक आईनेमरेबल पास कर सकते हैं। – labilbe

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