Pregunta

Me estoy embarcando en el uso de un marco de prueba para escribir pruebas unitarias y también el enfoque TDD. Al no tener ninguna experiencia previa, sentí que sería bueno optar por XUnit, aunque NUnit era la mejor alternativa. Intento transponer los métodos de prueba de MS Unit que he estado viendo en los libros de MVC que tengo, a los equivalentes de XUnit y ya estoy tropezando.

Específicamente lo siguiente: Prueba de lista de entradas para una colección de vistas como Index:

CollectionAssert.AllItemsAreInstancesOfType((ICollection)result.ViewData.Model,typeof(MyObject));  (from MVC unleashed book)

¿Cómo harías esto en XUnit o no se puede hacer así?

Lo que me desanima es la falta de documentación para XUnit y me pregunto si NUnit es una mejor opción .........

También parece que el código de prueba es casi su propio idioma. ¿Sería justo decir que existe un conjunto común de pruebas que se pueden ejecutar para todos los proyectos?

Respecto a TDD ... Entiendo el concepto, pero ¿las pruebas en sí mismas son las mismas que las pruebas unitarias en lo que contienen y son pruebas? ¡No estoy seguro de cuál es la diferencia real aparte de cuando se escriben!

¿Fue útil?

Solución

Soy fanático de mspec .Consulte estas preguntas

Enlaces útiles:

instalador de MSpec

Se ejecuta sobre NUnit .También hay métodos de extensión mvc para cosas como

result.ShouldBeAView().and().ShouldHaveModelOfType<T>()

Una prueba de controlador puede verse así

[Subject(typeof(JobsController))]
public class when_viewing_imdex_page : specifications_for_jobs_controller
{
    static ActionResult result;

    Establish context = 
        () => result = controller.Index();

    It should_return_a_view_result = 
        () => result.ShouldBeAView();

    It should_return_a_view_with_formviewdata = 
        () => result.ShouldBeAView().And().ShouldHaveModelOfType<IList<Job>>();

    It should_contain_a_list_of_jobs = 
        () => result.Model<IList<Job>>().ShouldNotBeEmpty();
}

Otros consejos

No sé sobre XUnit pero en NUnit hay restricciones de colecciones mire esta NUnit

para su ejemplo, podría usar este código

Assert.That((ICollection)result.ViewData.Model, Is.All.InstanceOf<MyObject>());

Creo que sería injusto para mí comentar sobre qué marco de prueba debería usar, ya que solo usé NUnit, pero siempre ha sido suficiente para mí.

Sin embargo, con respecto a su segundo y tercer punto; la mayoría de las pruebas son muy similares, pero ese es el punto de TDD, comienza desde la base y continúa refactorizando hasta que tengas "ni más, ni menos".

El desarrollo basado en pruebas y la prueba después del desarrollo son una forma de prueba unitaria; pero dentro de TDD, las pruebas están DIRIGIENDO el desarrollo, asegurando que cada línea que escriba tenga un propósito y esté completamente probada.

Hay desventajas; a veces, tienes que escribir el código antes de probar (especialmente al comenzar), para que puedas descubrir cómo probarlo, por lo que puede ser justo decir que tu desarrollo contendrá un poco de los dos tipos mencionados.

TDD, y cualquier forma de prueba automatizada definitivamente vale la pena el esfuerzo, aunque solo sea por la satisfacción que obtiene al ver pasar cientos de pruebas en su aplicación en su ejecución de prueba final.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top