Ich weiß, dass dies eine weitere späte Antwort ist, aber in meinem Team, das an die Verwendung des MS Test-Frameworks gebunden ist, haben wir eine Technik entwickelt, die sich nur auf anonyme Typen stützt, um ein Array von Testdaten zu speichern, und auf LINQ, um jede Zeile zu durchlaufen und zu testen. Es erfordert keine zusätzlichen Klassen oder Frameworks und ist in der Regel recht einfach zu lesen und zu verstehen. Es ist auch viel einfacher zu implementieren als datengesteuerte Tests mit externen Dateien oder einer verbundenen Datenbank.
Angenommen, Sie haben eine Erweiterungsmethode wie die folgende:
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);
}
}
Sie können ein Array anonymer Typen verwenden, die mit LINQ kombiniert sind, um Tests wie diesen zu schreiben:
[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);
});
}
}
Bei Verwendung dieser Technik ist es hilfreich, eine formatierte Nachricht zu verwenden, die die Eingabedaten in Assert enthält, um festzustellen, in welcher Zeile der Test fehlschlägt.
Ich habe über diese Lösung mit mehr Hintergrund und Details auf AgileCoder.net gebloggt .