2011-02-15 14 views
14

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

क्या कोई तरीका है जिसमें मैं वास्तव में लूप के परिणाम छह अलग-अलग परीक्षणों के रूप में दिखा सकता हूं (मानते हैं कि मेरे डेटाबेस में छः पंक्तियां हैं)?

namespace TestClasses 
{ 
    [TestFixture] 
    public class TestingClass : ConnectionClass 
    { 
     private ProductManagement pm; 

     [TestFixtureSetUp] 
     public void CreateTestClass() 
     { 
      pm = new ProductManagement(); 
     } 

     [TestCase] 
     public void GetProductDetailsTest() 
     { 
      SqlDataAdapter da = new SqlDataAdapter("Select * From GetProductDetailsTest;", Connection); 
      Database1DataSet.GetProductDetailsTestDataTable dt = new Database1DataSet.GetProductDetailsTestDataTable(); 
      da.Fill(dt); 

      foreach (Database1DataSet.GetProductDetailsTestRow dr in dt.Rows) 
      { 
       if (pm.GetProductById(dr.productId) == null) 
        Assert.Fail("Id of test case: " + dr.id + ", Product id of failure: " + dr.productId); 
      } 
     } 
    } 
} 

मूल रूप से मैं है के लिए क्या देख रहा हूँ, NUnit प्रदर्शित करने के लिए 3 से पारित कर दिया परीक्षण और 3 टेस्ट मैचों में विफल यदि संभव हो तो! किसी भी सहायता का स्वागत है, धन्यवाद! :)

उत्तर

16

[TestCaseSource] विशेषता आपको ऐसा करने की अनुमति देगी। के रूप में सैम धारक ने सुझाव दिया कि आप भी उपयोग कर सकते हैं RowTest एक्सटेंशन का उपयोग कर के अलावा

[Test, TestCaseSource("GetTestCases")] 
    public void GetProductDetailsTest(Database1DataSet.GetProductDetailsTestRow dr) 
    { 
     if (pm.GetProductById(dr.productId) == null) 
      Assert.Fail("Id of test case: " + dr.id + ", Product id of failure: " + dr.productId); 
     } 
    } 
+0

कूल कूल! यह NUnit 2.5.3 में उपलब्ध है, अपग्रेड करने का समय !!!! – Jonathan

+0

मैंने एक ही दृष्टिकोण की कोशिश की, लेकिन मुझे शून्य संदर्भ त्रुटि मिल रही है। यहां सवाल है कि मैंने स्टैकओवरफ्लो पर पोस्ट किया है: http://stackoverflow.com/questions/28624270/c-sharp-nunit-using-testcasesource-results-in-nullpointer – sparkr

3

आप नुनिट में डेटा संचालित परीक्षणों का उपयोग करके ऐसा कर सकते हैं, लेकिन मुझे यकीन नहीं है कि आप डेटाबेस से आने वाले डेटा के लिए ऐसा कर सकते हैं। की तर्ज पर कुछ:

[TestFixture] 
public class RowTestSample 
{ 
    [RowTest] 
    [Row(1)] 
    [Row(2)] 
    [Row(3)] 
    [Row(4)] 
    [Row(5)] 
    [Row(6)] 
    public void GetProductById(int productId) 
    { 
      Assert.That(pm.GetProductById(productId),Is.Not.Null); 
    } 
} 

जहां Row(n) में मानों उत्पाद id आप परीक्षण करना चाहते हैं। यह 6 परीक्षणों के रूप में दिखाया जाएगा, प्रत्येक एक अलग मूल्य के साथ।

मुझे यकीन नहीं है कि ये डीबी से आ सकते हैं, लेकिन शायद यह परीक्षण में करने के लिए एक अच्छी बात नहीं है।

मुझे इन परीक्षणों में मूल्य के बारे में निश्चित नहीं है, मुझे लगता है कि यह उत्पाद प्रबंधक क्या कर रहा है इस पर निर्भर करता है।

2

: आप एक समारोह है कि परीक्षण मामलों के एक गणनीय सूची लौटाती है

public IEnumerable<Database1DataSet.GetProductDetailsTestRow> GetTestCases() 
{ 
    SqlDataAdapter da = new SqlDataAdapter("Select * From GetProductDetailsTest;", Connection); 
    Database1DataSet.GetProductDetailsTestDataTable dt = new Database1DataSet.GetProductDetailsTestDataTable(); 
    da.Fill(dt); 

    foreach (Database1DataSet.GetProductDetailsTestRow dr in dt.Rows) 
    { 
     yield return dr; 
    } 
} 

तो आप में एक TestCaseSource पारित कर सकते हैं बना सकते हैं TestCaseAttribute इसके लिए:

[TestFixture] 
public class TestCaseSample 
{  
    [TestCase(1)] 
    [TestCase(2)] 
    [TestCase(3)] 
    [TestCase(4)] 
    [TestCase(5)] 
    [TestCase(6)] 
    public void GetProductById(int productId) 
    {   
     Assert.That(pm.GetProductById(productId),Is.Not.Null); 
    } 
} 
संबंधित मुद्दे