2010-06-25 11 views
6

Estoy empezando a comprar en BDD. Básicamente, como yo lo entiendo, escribes un escenario que describe bien los criterios de aceptación para cierta historia. Empiezas con pruebas sencillas, desde afuera hacia adentro, usando burlas en lugar de clases que aún no implementas. A medida que avances, deberás reemplazar los simulacros con clases reales. De Introduction to BDD:BDD y pruebas funcionales

Al principio, los fragmentos son implementarse usando burla para configurar una cuenta estar en una tarjeta de crédito o de sea válida. Estos forman los puntos iniciales para el comportamiento de implementación. Como implementar la aplicación, los dados y los resultados se cambian para utilizar las clases reales que han implementadas, por lo que por el momento se ha completado el escenario , tienen convertido adecuadas de extremo a extremo pruebas funcionales.

Mi pregunta es: Cuando termine de implementar un escenario, ¿deberían todas las clases que usa ser reales, como en las pruebas de integración? Por ejemplo, si usa DB, ¿debería escribir su código en una base de datos real (pero liviana en la memoria)? Al final, ¿debería tener algún simulacro en sus pruebas de extremo a extremo?

Respuesta

3

Bueno, depende :-) Según tengo entendido, las pruebas producidas por BDD todavía son pruebas unitarias, por lo que debe usar simulaciones para eliminar la dependencia de factores externos como DB.

Sin embargo, en las pruebas integradas de integración/funcionalidad, obviamente debe probar contra todo el sistema de producción, sin ningún tipo de burla.

2

Las pruebas de integración pueden contener stubs/mocks para falsificar el código/componentes fuera de los módulos que está integrando.

Sin embargo, en mi humilde opinión, la prueba de extremo a extremo debe significar que no hay trozos/burlas en el camino, sino solo código de producción. O en otras palabras, si hay simulaciones presentes, no es realmente una prueba de extremo a extremo.

0

Estoy de acuerdo con Peter y ratkok. Creo que mantienes los burlos para siempre, por lo que siempre tienes pruebas unitarias.

Por separado, es apropiado tener adicionalmente pruebas de integración (no se burla, usa un DB, etc.).

Incluso puede encontrar intermediarios útiles a veces (se burlan de una pieza del código dependiente (DOC), pero no de otra).

0

Recientemente he estado buscando en BDD y, en particular, jBehave. Trabajo en empresas bastante grandes con muchas personas orientadas a ceremonias y cascadas. Estoy viendo BDD como una forma de llevar los casos de uso de las empresas y convertirlas luego directamente en pruebas que luego el desarrollador puede convertir en pruebas unitarias o pruebas de integración.

BDD me parece que no es solo una forma de ayudar a los desarrolladores a entender lo que quiere el negocio, sino también una manera de garantizar que estos requisitos se representen con precisión.

Mi opinión de que si se trata de simulacros, entonces usted está haciendo pruebas unitarias. Necesita pruebas de unidades para probar los detalles de una operación de clases e integraciones para probar que la clase funciona bien con los demás. Encuentro que los desarrolladores a menudo se infunden entre los dos, pero lo mejor es ser lo más claro posible y mantenerse separados unos de otros.

2

Sí, en el momento en que se ejecuta un escenario, idealmente todas sus clases serán reales. Un escenario ejerce el comportamiento desde el punto de vista del usuario, por lo que el sistema debe ser como lo vería un usuario.

En los primeros días de BDD solíamos comenzar con los simulacros en los escenarios. Ya no me molesto más porque es mucho trabajo seguir burlándote a medida que bajas los niveles. En cambio, algunas veces haré cosas como datos o comportamientos de código rígido si me permite obtener retroalimentación de las partes interesadas más rápidamente.

No obstante, seguimos teniendo simulaciones en las pruebas unitarias.

Para cosas como bases de datos, seguro, puede usar una base de datos en memoria o lo que sea que lo ayude a obtener retroalimentación más rápido. En algún momento, probablemente deba ejecutar sus escenarios en un sistema que esté lo más cerca posible de la producción. Si esto es demasiado lento, puede hacerlo durante la noche en lugar de hacerlo como parte de su ciclo de construcción normal.

En cuanto a lo que "deberías" hacer, escribir el código correcto es mucho más complicado que escribir el código correcto. Me preocupa utilizar mis escenarios para obtener retroalimentación de las partes interesadas y los usuarios antes de preocuparme acerca de cuán cerca está mi entorno de un entorno de producción. Cuando llegas al punto en que los cambios se implementan cada dos semanas, claro, entonces probablemente quieras tener más certeza de que no estás presentando ningún error.

¡Buena suerte!

Cuestiones relacionadas