c# - unitarias - ¿Cómo establecer DateTime como ValuesAttribute para prueba de unidad?
pruebas unitarias c# (3)
Quiero hacer algo como esto
[Test]
public void Test([Values(new DateTime(2010, 12, 01),
new DateTime(2010, 12, 03))] DateTime from,
[Values(new DateTime(2010, 12, 02),
new DateTime(2010, 12, 04))] DateTime to)
{
IList<MyObject> result = MyMethod(from, to);
Assert.AreEqual(1, result.Count);
}
Pero me sale el siguiente error con respecto a los parámetros
Un argumento de atributo debe ser una expresión constante, tipo de expresión o expresión de creación de matriz de un
¿Alguna sugerencia?
ACTUALIZACIÓN: buen artículo sobre pruebas parametrizadas en NUnit 2.5
http://www.pgs-soft.com/new-features-in-nunit-2-5-part-1-parameterized-tests.html
Defina un atributo personalizado que acepte seis parámetros y luego utilícelo como
[Values(2010, 12, 1, 2010, 12, 3)]
y luego construir las instancias necesarias de DateTime
consecuencia.
O podrias hacer
[Values("12/01/2010", "12/03/2010")]
ya que eso podría ser un poco más legible y mantenible.
Como dice el mensaje de error, los valores de los atributos no pueden ser no constantes (están incrustados en los metadatos del conjunto). Contrariamente a las apariencias, el new DateTime(2010, 12, 1)
no es una expresión constante.
Simplemente pase las fechas como constantes de cadena y analice dentro de su prueba. Un poco molesto, pero es solo una prueba, así que no te preocupes demasiado.
[TestCase("1/1/2010")]
public void mytest(string dateInputAsString)
{
DateTime dateInput= DateTime.Parse(dateInputAsString);
...
}
Una alternativa a la hinchazón de su prueba de unidad, puede descargar la creación de TestCaseData usando el atributo TestCaseSource.
El atributo TestCaseSource le permite definir un método en una clase que invocará NUnit y los datos creados en el método pasarán a su caso de prueba.
Esta función está disponible en NUnit 2.5 y puede obtener más información here ...
[TestFixture]
public class DateValuesTest
{
[TestCaseSource(typeof(DateValuesTest), "DateValuesData")]
public bool MonthIsDecember(DateTime date)
{
var month = date.Month;
if (month == 12)
return true;
else
return false;
}
private static IEnumerable DateValuesData()
{
yield return new TestCaseData(new DateTime(2010, 12, 5)).Returns(true);
yield return new TestCaseData(new DateTime(2010, 12, 1)).Returns(true);
yield return new TestCaseData(new DateTime(2010, 01, 01)).Returns(false);
yield return new TestCaseData(new DateTime(2010, 11, 01)).Returns(false);
}
}