自从最近几天我开始从事数据驱动单元测试。我使用Excel电子表格作为数据源。虽然它减少了我的测试方法中的冗余代码(而不是每次都在测试方法中编写所有测试数据并调用相同的函数),但另一方面我认为它使我的单元测试变得复杂(使用配置设置,从Excel解析数据,意外的异常......等等。任何人都可以对每种方法的利弊有所了解。为了更好地理解,我正在编写带有和不带数据源的示例测试方法:
使用数据源
[TestMethod]
[DataSource("CompanyAddressInfo_DataSource")]
[DeploymentItem("CoreUnitTests\\CompanyUnitTests\\CompanyTestData.xlsx")]
public void CompanyAddressInfo_GetItem_Test()
{
if (TestContext.DataRow["Company_No"] != DBNull.Value)
{
bool expected = false;
bool actual=false;
if (TestContext.DataRow["Expected"].ToString() == "Y")
expected = true;
long Company_No = Convert.ToInt64(TestContext.DataRow["Company_No"]);
CompanyAddressInfo obj = CompanyAddressInfo.GetItem(Company_No);
if (obj != null)
{actual = (obj.Company_No == Company_No);}
Assert.AreEqual(expected,actual);
}
}
没有数据源
[TestMethod]
public void CompanyAddressInfo_GetItem_Test()
{
bool actual=false;
long Company_No;
Company_No = 20;
CompanyAddressInfo obj = CompanyAddressInfo.GetItem(Company_No);
actual = (obj.Company_No == Company_No);
Assert.AreEqual(true,actual);
Company_No = 23;
CompanyAddressInfo obj = CompanyAddressInfo.GetItem(Company_No);
actual = (obj.Company_No == Company_No);
Assert.AreEqual(false,actual);
..............so on
}
请注意,上述代码只是一个例子。另外,我认为数据驱动单元测试的另一种替代方法是制作一个通用函数来调用dll并将测试数据传递给该函数(从而减少冗余)。