2011-04-16 16 views
10

Tengo una aplicación de servidor y me preguntaba dónde debería comenzar si quiero comenzar a implementar TDD y usar Moq.Usando Moq y TDD, ¿por dónde empezar?

¿Qué buenos libros podría leer sobre el tema, que no están demasiado "orientados a la web"?

tengo preguntas sobre la materia, como:

¿Debo burlarse de todos los objetos que quiero probar, o sólo los que no puedo poner en práctica, al igual que los escritores de texto?

Mi servidor necesita una gran cantidad de configuración antes de que pueda hacer algo que quiero probar, ¿debería simplemente meterlo en una función [TestInitialize]?

¿Cómo debo encadenar mis pruebas, si deseo probar una funcionalidad más profunda?

Respuesta

7

recomiendo dos libros: Test Driven Development by Example, por Kent Beck. Es un excelente libro sobre TDD, que disfruto particularmente porque él repasa un ejemplo, que es muy útil para captar el ritmo y el proceso de pensamiento. Por otro lado, es un poco ligero en la burla. Para eso leería The Art of Unit Testing, por Roy Osherove. Como sugiere el título, no se centra específicamente en TDD, sino en cómo escribir buenas pruebas unitarias; él tiene una buena cobertura en simulacros y trozos.

En cuanto a lo que debe burlarse, la idea de burlarse es permitirle aislar la clase/función que está probando del resto del entorno, para que pueda probar su comportamiento contra un entorno falso que usted controla. En ese marco, no deberías burlarte de la clase, sino más bien cosas de las que depende.

Un ejemplo trivial: si tuvieras una clase usando un registrador, probar que la clase "escribe" al registrador sería muy doloroso, y podría involucrar cosas como verificar si el registrador ha escrito en un archivo de texto. Esta no es una buena idea en muchos niveles, comenzando por el hecho de que a su clase no le importa cómo el registrador hace su trabajo específicamente. En ese caso, usted reemplazaría la instancia de Logger en su clase con un Logger falso, burlado, y luego podrá verificar que su clase está llamando al Logger en los momentos apropiados, sin preocuparse por lo que hace exactamente el registrador.

En cuanto a la inicialización del servidor: una prueba unitaria suele estar en la memoria, sin dependencias con el entorno, por lo que si está haciendo TDD, probablemente no tenga que hacer eso. En general, demasiado (¿algún?) Código de inicialización en una prueba unitaria es una mala señal.

Esto sugiere que está buscando más pruebas de aceptación/pruebas de estilo BDD. Recomiendo este artículo reciente en MSDN Magazine en Behavior-Driven Development with SpecFlow and WatiN; explica cómo puede desarrollarse de manera experimental, desarrollando juntas pruebas de alto nivel que verifican que la aplicación está haciendo lo que el usuario quiere (pruebas de aceptación, donde podría ejecutar su servidor y aplicación reales), y que lo está haciendo al tener pequeñas piezas de código que hacen lo que el desarrollador pretende (pruebas unitarias).

Espero que esto ayude, y pruebas felices!

+0

Hay ciertas cosas que debo hacer para lograr cualquier cosa, porque las cosas que deseo probar generalmente están relacionadas con algún elemento que se crea una instancia cuando el servidor se enciende. Así que tengo que ejecutar mi compilador de scripts (que construye un dll e incluye su ensamblaje) e inicializar y configurar esos archivos (es decir, invocar llamadas a métodos estáticos en bastantes scripts) – bevacqua

+0

+1, especialmente para el libro de Osherove. ¡Gran lectura! – TrueWill

11

No se burla de los objetos que desea probar. Si haces eso, estás probando el simulacro, ¡no tu objeto! Debe simular las dependencias de los objetos que está probando.

5

Uno de mis libros favoritos en TDD es Test Driven Development By Example (Kent Beck). También me gustó un 4-part screen cast que hizo.

Episodio 1: prueba de arranque (28 minutos)

En este episodio tomar la primera prueba para la primera característica de nuestra aplicación de ejemplo y cortar hacia arriba para proporcionar una retroalimentación más frecuente.

Episodio 2: pruebas aisladas (23 minutos)

En este episodio nos aseguramos de que las pruebas no se afectan entre sí. Una vez que se aíslan las pruebas implementamos varias operaciones nuevas.

Episodio 3: gran característica (25 minutos)

En este episodio toman una característica grande y se mire hacia arriba para proporcionar una retroalimentación más frecuente. Al final, limpiamos el código para eliminar la duplicación y hacer que el código sea más fácil de leer.

Episodio 4: Acabado (20 minutos)

En este episodio terminó la funcionalidad de la aplicación de la muestra y prepararlo para su uso por otros. Las decisiones de diseño que se difirieron antes en el desarrollo ahora son más claras. La serie se cierra con un resumen de las lecciones de todos los episodios.

1

Su código debe evolucionar a través del desarrollo de sus pruebas, si desea seguir el patrón TDD. Sería una responsabilidad única y como se mencionó, fallará cualquier dependencia que tenga la clase que está probando. De esta forma puede configurar datos ficticios y comportamientos esperados en cualquier dependencia y no preocuparse más por ellos.

Esto tiene una breve introducción: http://www.agiledata.org/essays/tdd.html desafortunadamente no tengo ningún libro específico que pueda recomendar por experiencia personal.

La lectura de este también puede ser útil para ayudarle a empezar: http://stephenwalther.com/blog/archive/2008/06/12/tdd-introduction-to-moq.aspx

Cuestiones relacionadas