Je sais que c'est une autre réponse tardive, mais dans mon équipe qui est verrouillée dans l'utilisation du framework MS Test, nous avons développé une technique qui repose uniquement sur les types anonymes pour contenir un tableau de données de test, et LINQ pour parcourir et tester chaque ligne. Il ne nécessite aucune classe ou framework supplémentaire et a tendance à être assez facile à lire et à comprendre. Il est également beaucoup plus facile à mettre en œuvre que les tests basés sur les données utilisant des fichiers externes ou une base de données connectée.
Par exemple, disons que vous avez une méthode d'extension comme celle-ci:
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);
}
}
Vous pouvez utiliser un tableau de types anonymes combiné à LINQ pour écrire un test comme celui-ci:
[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);
});
}
}
Lors de l'utilisation de cette technique, il est utile d'utiliser un message formaté qui inclut les données d'entrée dans l'Assert pour vous aider à identifier la ligne qui entraîne l'échec du test.
J'ai blogué sur cette solution avec plus d'informations et de détails sur AgileCoder.net .