我有一项学校作业,需要创建数据驱动风格的 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);
}
}
}
}
基本上我正在寻找的是,如果可能的话,让 NUnit 显示 3 个通过的测试和 3 个失败的测试!任何帮助将不胜感激,谢谢! :)
The [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;
}
}
那么你可以在以下位置传递一个 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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)