我终于能够使用 NUnit 的TestCaseSource 属性完成我想要的。代码看起来有点难看,但它可以工作。
这是从 .csv 文件中提取数据并将其传递给测试方法的示例。该测试适用于一个简单计算器的 Add 方法,该方法采用两个整数,将它们相加并返回总和。
从文件加载测试数据的类。
public class TestData
{
public int number1 { get; set; }
public int number2 { get; set; }
public int sum { get; set; }
public static IEnumerable TestCases
{
get
{
string inputLine;
using(FileStream inputStream =
new FileStream("C:\\Code\\TestData\\TestData.csv",
FileMode.Open,
FileAccess.Read))
{
StreamReader streamReader = new StreamReader(inputStream);
while((inputLine = streamReader.ReadLine()) != null)
{
var data = inputLine.Split(',');
yield return new TestData {
number1 = Convert.ToInt32(data[0])
,number2 = Convert.ToInt32(data[1])
,sum = Convert.ToInt32(data[2])
};
}
streamReader.Close();
inputStream.Close();
}
}
}
}
带有实际测试的类:
[TestFixture]
public class CalculatorTests
{
[Test]
[TestCaseSource(typeof(TestData), "TestCases")]
public void AddTwoNumbers(TestData data)
{
int sum = Calculator.Add(data.number1, data.number2);
sum.ShouldEqual(data.sum);
}
}
TestData.csv 的内容
4,4,8
15,20,35
8,8,16
5,5,10
42,13,55
修改 TestData 类中的 get 属性以从您想要的任何数据源(即数据库、Web 服务、Excel ......)中提取数据应该相当简单