Estoy probando un método que es generar una colección de objetos de datos. Quiero verificar que las propiedades de los objetos se estén configurando correctamente. Algunas de las propiedades se establecerán en la misma cosa; otros se establecerán en un valor que depende de su posición en la colección. La forma natural de hacer esto parece ser con un bucle. Sin embargo, Roy Osherove recomienda enfáticamente no usar la lógica en las pruebas unitarias ( Art of Unit Testing , 178). Él dice:
Una prueba que contiene lógica generalmente está probando más de una cosa a la vez, lo que no se recomienda, porque la prueba es menos legible y más frágil. Pero la lógica de prueba también agrega complejidad que puede contener un error oculto.
Las pruebas deberían, como regla general, ser una serie de llamadas a métodos sin flujos de control, ni siquiera
try-catch
, y con llamadas de afirmación.
Sin embargo, no puedo ver nada malo en mi diseño (¿de qué otra manera genera una lista de objetos de datos, algunos de cuyos valores dependen de en qué lugar de la secuencia se encuentran? No se pueden generar y probar exactamente por separado). ¿Hay algo que no sea amigable con mi diseño? ¿O estoy siendo demasiado rígidamente dedicado a la enseñanza de Osherove? ¿O hay alguna magia secreta de prueba de unidad que no conozco que evita este problema? (Estoy escribiendo en C # / VS2010 / NUnit, pero si es posible estoy buscando respuestas independientes del lenguaje).
in
), si la prueba es "Frob se agregó con éxito a una colección existente".
toString()
la Colección y la comparo con lo que debería ser. Simple y funciona.