And*_*rew 14 .net c# nunit unit-testing
我有一个学校作业,我需要创建一个数据驱动的NUnit测试风格.使用下面的代码,我可以从数据库中获取数据,但每次'Assert'调用失败时,测试都会停止.
有没有什么方法可以实际显示循环的结果作为六个不同的测试(考虑到我的数据库中有六行)?
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我正在寻找的是,如果可能的话,NUnit将显示3个通过的测试和3个失败的测试!任何帮助将不胜感激,谢谢!:)
Mar*_*ath 16
该[TestCaseSource]属性将允许您执行此操作.您可以创建一个返回可枚举测试用例列表的函数
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以传递一个TestCaseSource:
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4459 次 |
| 最近记录: |