Я наконец смог выполнить то, что хотел, используя атрибут 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
Должно быть довольно просто изменить свойство get в классе TestData для извлечения данных из любого источника данных, который вы хотите (например, базы данных, веб-службы, Excel ...)