2009-10-05 10 views
14

Acabo de ver este divertido YouTube Video about unit testing (es Hitler con subtítulos falsos mordiendo a su equipo por no hacer buenas pruebas unitarias - omítalo si tiene problemas de humor) donde los talones son criticados. Pero no entiendo qué mal con los talones.¿Qué pasa con los Stubs para las pruebas unitarias?

No he empezado a usar un marco de burla y no he empezado a sentir el dolor por no usar uno.

estoy yo en un mundo de una herida en algún momento por la línea, having chosen handwritten stubs and fakes instead of mocks (like Rhinomock etc)? (utilizando la taxonomía de Fowler)

¿Cuáles son las consideraciones para escoger entre un talón de maqueta y escrito a mano?

+1

Te lo debes a ti mismo usando un marco de burla (yo uso rinoceronte). Hay muchas cosas que harán para que su vida TDD sea más fácil. – mxmissile

Respuesta

11

No hay nada de malo con los talones, hay espacio para trozos, burlas ... y espías. Todos son "prueba de dobles", pero con diferentes propósitos, como se explica en Mocks and Stubs aren't Spies:

[...] Antes de continuar, quisiera aclarar y definir algunos términos en uso aquí, que descubrí originalmente en Gerard Meszaros 'xUnit Patterns book.

  • Un Maniquí objeto es un objeto marcador de posición pasa al sistema bajo prueba pero nunca utilizado.
  • a trozo de prueba proporciona el sistema bajo prueba con la entrada indirecta
  • A Spy prueba proporciona una manera de verificar que el sistema bajo prueba realiza la salida indirecta correcta
  • Un objeto Mock proporciona el sistema bajo prueba con tanto indirecto de entrada y una manera de verificar la salida indirecta

[...] y se puede dejar que esta práctica tabla guiar sus decisiones:

alt text http://www.hamletdarcy.com/files/2007/MocksAreNotSpies.jpg

PD: Mockito - The New Mock Framework on the Block vale la pena leer también.

+0

+1 para la tabla. – TrueWill

+1

+0.5 para el gráfico, +0.5 para el enlace – guerda

+1

-1 para el gráfico, básicamente es incorrecto. Los simuladores pueden fallar en las afirmaciones, pueden ser más fáciles de mantener y son mucho más fáciles de usar. Creo que el gráfico puede estar desactualizado o en contra de un viejo marco burlón o un marco en un lenguaje/versión anterior de Java. (En realidad no vota -1, pero esa tabla es mala) –

5

Los simulacros son mucho más fáciles de instalar. Son una instancia real de su clase, preadaptada con la capacidad de anular la acción de cualquier método con un mínimo estándar.

Hay muchas pequeñas consideraciones, tales como: Si no desea tratar con ninguno de los métodos, puede hacer que actúe como no operativo o no pasar la prueba, su elección, pero tampoco prácticamente no hay código.

¿Cuánta repetición se obtiene cuando rescinde una clase? ¿Cómo lo manejas si tu clase es final? ¿Jugas trucos para obtener tu stub en el classpath primero, o usas diferente source?

Recomiendo simplemente comenzar con los simulacros - Es más fácil todo.

0

Los mocks y stubs se utilizan para lograr una prueba de unidad real. Simplemente te burlas de todas las dependencias, y prueba tu clase de forma aislada.

Actualmente estoy usando MOQ para burlarse y tropezar.

3

No hay nada de malo en usar stubs en lugar de mocks.

Si desea obtener información técnica, los simulacros son objetos "inteligentes" con expectativas que se pueden verificar. Los stubs son objetos ficticios que devuelven valores preestablecidos. Ver Mocks Aren't Stubs.

Pero muchas personas (yo incluido) prefieren hacer pruebas estatales con stubs en lugar de pruebas de comportamiento con burlas. Inyecta un trozo en la clase bajo prueba, llama a un método y luego verifica el estado de la clase bajo prueba. Tiende a hacer pruebas menos frágiles que afirmar que las partes internas de la clase llamaron método X de un objeto simulado con argumento Y.

No creo que te atrape un mundo de dolor. Si no ha comenzado a sentir el dolor, probablemente aún no necesite un marco de aislamiento/burla. Cuando y si lo haces, tener trozos o falsificaciones manuscritas no va a doler nada.

Si tiene muchas interfaces o si sus interfaces tienen muchos métodos, un marco de aislamiento/burla puede ahorrar mucho tiempo en los códigos de codificación manual.

Me gusta Moq mucho; Me resulta más fácil de usar que Rhino Mocks para crear stubs.

8

uso el siguiente terminología (introducido por Roy Osherove, el autor del Arte de la Unidad-Testing):

Un falsa se llama talón de si usted le diga que algo falso en caso de una el método se llama con tales y tales parámetros. Pero si también verificas que esa llamada realmente tuvo lugar o tuvo lugar exactamente N veces, entonces esa falsificación se llama simulacro. En breve. un falso es un talón a menos que llame a Verify() y luego sea un simulacro.

Obviamente, tendrá que usar trozos en algunos casos y burlarse en otros. Por lo tanto, criticar stubs rotundamente es probablemente incorrecto y usar stubs exclusivamente probablemente también sea incorrecto.

Si no ha empezado a usar un marco de burla (término alternativo: framework de aislamiento), debe vigilarlos y reevaluar sus opciones con frecuencia. Pasé de simulacros manuales a NMock2 a Moq muy rápidamente. Aquí hay un interesante poll de programadores que muestra lo que usan. Los simulacros/talones manuales son minoría, pero no son poco comunes.

+1

+1 para el Arte de Prueba Unitaria (buen libro) y para Moq (buena herramienta). – TrueWill

Cuestiones relacionadas