Pregunta

Si ya tengo la prueba de integración para mi programa, y todos aprobaron, entonces tengo una buena sensación de que va a trabajar.Entonces, ¿cuáles son las razones para escribir/add pruebas de unidad?Pues ya tengo para escribir pruebas de integración de todos modos, yo al igual que para escribir sólo la prueba de unidad para las partes que no están cubiertos por las pruebas de integración.

Lo que yo sé el beneficio de la prueba de unidad sobre la integración de la prueba son

  • Pequeña y por lo tanto rápido para ejecutar (pero la adición de una nueva unidad a prueba de algo que ya está probado por la integración de la prueba significa que el total de la prueba de traje de obtener más y más a ejecutar)
  • Busque error sea más fácil, porque sólo prueba una cosa (pero que puedo empezar a escribir pruebas unitarias para verificar que cada parte individual cuando mi integración de error en la prueba)
  • Encontrar el bug que no pueden ser atrapados en las pruebas de integración.por ejemplo,enmascaramiento/compensación de errores.(pero si mis pruebas de integración de todos los pases, lo que significa que mi programa de trabajo, incluso algunos de los secretos error existe.Para buscar y corregir estos errores no son realmente de alta prioridad, a menos que comenzar a romper las futuras pruebas de integración o causar problema de rendimiento )

Y siempre queremos escribir menos código, pero escribir pruebas unitarias necesita mucho más código (principalmente el programa de instalación de objetos ficticios).La diferencia entre algunos de mis pruebas de unidad pruebas de integración y es que en la unidad de pruebas, puedo usar el objeto mock, y en las pruebas de integración, yo uso real del objeto.Que tiene un montón de duplicación y no me gusta de código duplicado, incluso en las pruebas debido a esto agrega una sobrecarga para cambiar el código de comportamiento (refactorizar herramienta no puede hacer todo el trabajo todo el tiempo).

¿Fue útil?

Solución

Has establecido buenos argumentos para y contra las pruebas de la unidad. Entonces, tienes que preguntarte, " ¿Veo valor en los argumentos positivos que superan los costos en los negativos? " , ciertamente hago:

  • Pequeño y rápido es un buen aspecto de las pruebas de la unidad, aunque de ninguna manera es lo más importante.
  • Localing-bug [s] -asier es extremadamente valioso. Muchos estudios de desarrollo de software profesional han demostrado que el costo de un error se levanta abruptamente a medida que envejece y se mueve hacia abajo en la tubería de entrega de software.
  • Buscar: los insectos enmascarados son valiosos. Cuando sepa que un componente en particular tiene todos sus comportamientos verificados, puede usarlo de manera que no se usó anteriormente, con confianza. Si la única verificación es a través de las pruebas de integración, solo sabe que su actual usa se comportan correctamente.
  • burlarse es costoso en casos del mundo real, y mantener las burlas es doblemente así. De hecho, cuando se burla de objetos o interfaces "interesantes", ¿puede incluso necesitar pruebas que verifique que sus objetos simulados modelan correctamente sus objetos reales!

En mi libro, los profesionales superan los contras.

Otros consejos

No veo mucho valor en reeolvender una máquina de integración existente como un inconveniente.

Las pruebas de integración a menudo son mucho más fáciles de escribir para aplicaciones de legado no TDD porque, por lo general, las funcionalidades a ser probadas están estrechamente acopladas, por lo que las unidades de prueba de forma aislada (= inútil) pueden ser difíciles / caras / imposibles.

> Then what are the reasons to write/add unit tests?

En mi opinión, el desarrollo impulsado por la prueba es más efectivo si escribe las pruebas de la unidad antes de el código real.De esta manera, el código que cumple las pruebas se separe claramente con un mínimo de referencias externas que son fáciles de prueba.

Si el código ya existe sin las pruebas de la unidad, generalmente es un gran trabajo adicional para escribir las pruebas de la unidad después porque el código no se escribió para una prueba fácil.

Si realiza TDD, el código automáticamente es fácilmente comprobable.

Las pruebas de integración solo deben verificar que varios componentes estén trabajando juntos como se esperaba.Si la lógica de los componentes individuales es precisa debe verificarse por las pruebas unitarias.
La mayoría de los métodos tienen varios rutas de ejecución posibles;Piense en las variables de entrada de IF-Then-May, con valores inesperados o simplemente claros, etc. Por lo general, los desarrolladores tienden a pensar solo en el camino feliz: el camino normal que no sale mal.Pero en lo que respecta a esos otros caminos, tiene dos opciones: puede dejar que su usuario final explore esas rutas a través de las acciones que toman en la interfaz de usuario y esperan que no bloqueen su solicitud, o puede escribir pruebas de unidad que afirmanEl comportamiento de esos otros caminos y actúa cuando sea necesario.

Algunas de las razones por las que ha señalado en su pregunta son realmente importantes y, por sí mismas, podrían hacer el caso a favor de las pruebas de la unidad, pero YMMV. Por ejemplo, ¿con qué frecuencia ejecuta su suite de prueba integrada? Mi experiencia con pruebas integradas es que, tarde o temprano, se pondrán tan lento que no las ejecutará cada vez que realice un cambio y la hora entre insertar y detectar un error aumentará.

Además, un gran error que pueda estar haciendo es confiar en que

Find bug that may not be caught in integration test. e.g. masking/offsetting bugs.

no es importante. ¿Está esperando que sus usuarios encuentren los errores para usted? Las coberturas de confianza obtenidas de las pruebas integradas son peligrosas en mi opinión, puede obtener muy fácilmente un alto% de cobertura, pero en realidad está probando muy poco.

Supongo que la referencia canónica contra pruebas integradas son las publicaciones de JBRAins:

http://www.jbrains.ca/ Permalink / Tests integrados-ARE-A-SPAM-PART-1

En caso de que no los haya leído ya.

Finalmente, imo Los comentarios que puede obtener de las pruebas unitarias para su diseño es invaluable. Juzgar un diseño por la sensación de intestino y confiar en las pruebas integradas también puede ser un error.

Si espera que tenga que modificar o refactore su código, tener pruebas unitarias es esencial.Las pruebas unitarias existen no solo para demostrar errores en el momento en que se escribe el código, sino que muestre cuando aparezcan nuevos errores cuando se escribe más código.

Sí, es mucho mejor escribir su integración y pruebas de unidad primero, pero tiene mucho valor para tenerlas incluso si están escritas más tarde.

Licenciado bajo: CC-BY-SA con atribución
scroll top