En mi equipo que está bloqueado en el marco usando MS prueba, hemos desarrollado una técnica que se basa sólo en Anónimo Tipos para contener 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 entender. También es mucho más fácil de implementar que las pruebas basadas en datos que usan archivos externos o una base de datos conectada.
Por ejemplo, supongamos que tiene un método de extensión de esta manera:
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);
}
}
usted podría utilizar y variedad de tipos anónimos se combinaron para LINQ a 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 utilizar Esta técnica es útil para utilizar un mensaje formateado que incluye los datos de entrada en el Assert para ayudarlo a identificar qué fila hace que falle la prueba.
He escrito sobre esta solución con más antecedentes y detalles en AgileCoder.net.
Lamentablemente, DaTest parece funcionar solo con VS2008. –
http://code.google.com/p/datest/wiki/DaTest –
Posible duplicado de [¿Cómo ejecutar un método de prueba con múltiples parámetros en MSTest?] (Http://stackoverflow.com/questions/9021881/how -to-run-a-test-method-with-multiple-parameters-in-mstest) – Rob