visual unitarias studio pruebas c# unit-testing nunit

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); } }