¿Cuándo debo usar objetos simulados?

14

He leído muchas cosas sobre TDD pero todavía tengo dudas. Por ejemplo, tengo estos diagramas de clase:

Es un ejemplo simple, solo para aprender sobre TDD y los objetos simulados.

¿Qué prueba debo escribir primero? Producto , luego Línea y la última, ¿Orden ? Si hago eso, ¿debo usar Línea y Producto para probar Orden o debo usar Mock Objects? ¿Cuándo debo usar objetos simulados? ¿Debo usar UML con XP y TDD?

Todavía no entiendo estas cosas.

    
pregunta Zanon 24.01.2011 - 14:30

4 respuestas

10

A juzgar por el diagrama, el producto es una clase de datos tontos, sin funcionalidad para probar. Así que comenzaría a escribir pruebas para (e implementar, estilo TDD) la primera línea y luego ordenar, en la escala de dependencias. Por lo general, es sensato que se analicen las clases de nivel inferior antes de comenzar a trabajar en las clases de nivel superior (es decir, que dependen del nivel inferior). Esto hace que la captura de errores sea más eficiente.

La necesidad de usar objetos simulados depende de las dependencias reales de la clase probada. Si estas son clases simples que puede crear y configurar fácilmente con los datos / estados deseados que se requieren para sus pruebas, no necesita simulacros. (Este parece ser el caso de su diseño de ejemplo aquí). Sin embargo, si alguna de las dependencias es difícil de inicializar / tiene dependencias extensas / tiene efectos secundarios indeseables / depende de un recurso externo como un DB, entonces tiene sentido para usar un objeto simulado en su lugar.

    
respondido por el Péter Török 24.01.2011 - 14:32
4

No veo mucha necesidad de objetos simulados aquí. Como han señalado otros, los necesita principalmente si las dependencias son difíciles de configurar.

Por ejemplo, los usamos con los proyectos de Ruby on Rails cuando probamos los controladores y necesitábamos un inicio de sesión de usuario que hubiera requerido una llamada a otro controlador y almacenar parte de su información en una cookie. En este caso, es útil simular un usuario registrado que devuelve verdadero cuando se le pregunta acerca de un cierto privilegio de acceso.

    
respondido por el thorsten müller 24.01.2011 - 14:51
2

Normalmente, para las pruebas, desea aislar el sistema / objeto bajo prueba, por lo que se burlaría de cualquier cosa que esté fuera de eso. Entonces, al usar su diagrama de clase, al probar un objeto de orden, use un simulacro para el objeto de línea. Al probar la línea, utilice un simulacro para orden y producto. Al probar el producto, utilice simulacro para la línea.

    
respondido por el BlackICE 24.01.2011 - 14:38
2

"TDD es principalmente una técnica de diseño con un efecto secundario de garantizar que su código fuente sea probado en su totalidad" - Scott W. Ambler

La idea es encontrar el diseño escribiendo pruebas unitarias. En su caso, parece que ya tiene el diseño implementado, lo que en cierto modo anula el propósito de TDD (suponiendo que su diseño sea definitivo).

En cuanto a la burla. Si desea burlarse, le sugiero que se burle del Producto al escribir pruebas para la Línea y la Línea simulada al probar la Orden. Pero puede ser una exageración aquí. Personalmente, trato de limitar la burla tanto como sea posible, y lo uso para desacoplar dependencias de clases externas (como instancias de base de datos).

    
respondido por el Martin Wickman 24.01.2011 - 14:33

Lea otras preguntas en las etiquetas