Sé que esta es otra respuesta tardía, pero en mi equipo que está comprometido con el uso del marco de prueba de MS, desarrollamos una técnica que se basa solo en tipos anónimos para almacenar una matriz de datos de prueba y LINQ para recorrer y probar cada fila. No requiere clases o marcos adicionales, y tiende a ser bastante fácil de leer y comprender. También es mucho más fácil de implementar que las pruebas basadas en datos que utilizan archivos externos o una base de datos conectada.
Por ejemplo, digamos que tiene un método de extensión como este:
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);
}
}
Puede usar una matriz de tipos anónimos combinados con LINQ para escribir pruebas como esta:
[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);
});
}
}
Al usar esta técnica, es útil usar un mensaje formateado que incluya los datos de entrada en la afirmación para ayudarlo a identificar qué fila hace que la prueba falle.
He escrito en un blog sobre esta solución con más antecedentes y detalles en AgileCoder.net .