Я знаю, що це ще одна пізня відповідь, але в моїй команді, яка замикається на використанні MS Test Framework, ми розробили техніку, яка покладається лише на анонімні типи, щоб утримувати масив тестових даних, а LINQ проходити цикл і перевіряти кожен рядок. Він не вимагає додаткових класів чи рамок, і, як правило, досить легко читати та розуміти. Це також набагато простіше здійснити, ніж керовані даними тести, використовуючи зовнішні файли або підключену базу даних.
Наприклад, скажіть, у вас є такий метод розширення:
public static class Extensions
{
/// <summary>
/// Get the Qtr with optional offset to add or subtract quarters
/// </summary>
public static int GetQuarterNumber(this DateTime parmDate, int offset = 0)
{
return (int)Math.Ceiling(parmDate.AddMonths(offset * 3).Month / 3m);
}
}
Ви можете використовувати та масив анонімних типів, об’єднаних у LINQ, щоб написати такі тести:
[TestMethod]
public void MonthReturnsProperQuarterWithOffset()
{
// Arrange
var values = new[] {
new { inputDate = new DateTime(2013, 1, 1), offset = 1, expectedQuarter = 2},
new { inputDate = new DateTime(2013, 1, 1), offset = -1, expectedQuarter = 4},
new { inputDate = new DateTime(2013, 4, 1), offset = 1, expectedQuarter = 3},
new { inputDate = new DateTime(2013, 4, 1), offset = -1, expectedQuarter = 1},
new { inputDate = new DateTime(2013, 7, 1), offset = 1, expectedQuarter = 4},
new { inputDate = new DateTime(2013, 7, 1), offset = -1, expectedQuarter = 2},
new { inputDate = new DateTime(2013, 10, 1), offset = 1, expectedQuarter = 1},
new { inputDate = new DateTime(2013, 10, 1), offset = -1, expectedQuarter = 3}
// Could add as many rows as you want, or extract to a private method that
// builds the array of data
};
values.ToList().ForEach(val =>
{
// Act
int actualQuarter = val.inputDate.GetQuarterNumber(val.offset);
// Assert
Assert.AreEqual(val.expectedQuarter, actualQuarter,
"Failed for inputDate={0}, offset={1} and expectedQuarter={2}.", val.inputDate, val.offset, val.expectedQuarter);
});
}
}
Під час використання цієї методики корисно використовувати відформатоване повідомлення, яке включає вхідні дані у звіті, щоб допомогти вам визначити, який рядок викликає збій тесту.
Я обговорював це рішення з більш детальною інформацією та деталізацією на AgileCoder.net .