2011-02-15 15 views
14

NUnit testinin veri güdümlü bir stilini oluşturmam gereken bir okul görevim var. Aşağıdaki kodu kullanarak verileri veritabanından alabiliyorum, ancak her zaman bir 'Assert' çağrısı başarısız olursa, test durdurulur.C#, NUnit Bir Döngü içinde Assert

Aslında altı farklı testlerin olarak döngünün sonuçlarını gösterebileceği konusunda herhangi bir yolu var mı (benim veritabanında altı satır var göz önünde bulundurarak)? NUnit görüntülemek için mümkünse

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); 
      } 
     } 
    } 
} 

Temelde olduğu ne arıyorum, 3 geçti testleri ve 3 testleri başarısız oldu! Herhangi bir yardım büyük, teşekkürler duyacağız! :)

cevap

16

[TestCaseSource] özniteliği bunu yapmanıza izin verecektir. Ayrıca kullanabilirsiniz Sam Holder önerdiği gibi RowTest uzantısını kullanarak yanında

[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

Thats Cool! NUnit 2.5.3'te kullanılabilir, yükseltme zamanı !! – Jonathan

+0

Aynı yaklaşımı denedim, ancak boş bir başvuru hatası alıyorum. İşte Stackoverflow'a gönderdiğim soru: http://stackoverflow.com/questions/28624270/c-sharp-nunit-using-testcasesource-results-in-nullpointer – sparkr

3

Eğer nunit testleri tahrik verileri kullanarak bunu yapabilirsiniz, ama sen veritabanından geliyor veriler için bunu yapabilir emin değilim. çizgisinde bir şey: Row(n) değerler test etmek istediğiniz ürün kimlikleri olan

[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); 
    } 
} 

. Bu, her biri farklı bir değere sahip 6 test olarak gösterilecektir. Bu DB'den gelebilir eğer

emin değilim, ama muhtemelen bu zaten testte yapıyor olması iyi bir şey değildir.

Bu testlerdeki değerden ya da emin değilim, sanırım ProductManager'ın yaptıklarına bağlı.

2

: Sen bir TestCaseSource geçebilir

sonra
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; 
    } 
} 

test durumları bir enumerable listesini döndüren bir işlev oluşturabilir Bunun için 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); 
    } 
} 
İlgili konular