2010-01-04 25 views
7

Tengo una función que guarda las fotos (almacenadas en la base de datos, la aplicación ofrece la opción del usuario para guardarlas en un directorio) a un directorio determinado. Ahora, esto no funcionaba correctamente. Lo arreglé. Ahora, ¿debo escribir la prueba unitaria o prueba de integración para la función?¿Debo escribir prueba de integración o prueba de unidad?

+0

Prefiero escribir unittests para clases individuales y (a veces) herramientas de grabación para pruebas de integración. – stacker

Respuesta

17

Para su caso, desea escribir una prueba de integración para cubrir el escenario que menciona. Tengo un full post on this topic. Sin embargo, aquí hay una versión resumida específica para su pregunta:

En su libro The Art of Unit Testing, Roy Osherove describe un principio clave que una unidad de prueba debe ser "confiable". En la superficie, esto parece bastante obvio. Sin embargo, este subyacente resalta algunas de las diferencias clave entre una prueba unitaria y una prueba de integración.

Con una prueba confiable, debe poder confiar en los resultados el 100% del tiempo. Si la prueba falla, quiere estar seguro de que el código está roto y debe corregirse. No debería tener que preguntar cosas como "¿Ha caído la base de datos?", "¿Ha estado bien la cadena de conexión?", "¿Se ha modificado el procedimiento almacenado?". Al hacer estas preguntas, muestra que no puede confiar en los resultados y es probable que tenga una "prueba de unidad" mal diseñada.

Como su escenario describe una situación con dependencias múltiples similares, desea cubrirla con una prueba de integración. Nuevamente, para más detalles, vea my full post here también.

¡Buena suerte!

+1

gran punto sobre 'pruebas confiables' –

+0

Gracias por su comentario. El concepto de Roy ciertamente me ayudó también. ¡Bienvenido a stackoverflow también! –

+1

Acabo de leer esta respuesta, y responde totalmente a mis preguntas también. Soy un poco nuevo en el desarrollo "profesional", y esto me dio una mejor idea de lo que son las pruebas de integración, que era lo que no entendía del todo. ¡Gracias! –

8

Pruebas de integración y las pruebas unitarias tienen diferentes alcances y propósitos:

  • pruebas de unidad de prueba pequeñas piezas de código (como una función) en aislamiento del resto del programa, que cubre idealmente todos los posibles casos de borde (como excepciones, parámetros nulos, etc.)
  • Las pruebas de integración prueban una aplicación completa desde el punto de vista de un caso de uso. Ellos nunca pueden cubrir todos los casos extremos, pero pueden detectar los problemas con la interacción entre las partes del código y el código de pegamento que los une, que las pruebas de unidad a menudo pierden

Para una función chamusquina, que realmente sólo puede tener una prueba unitaria, y deberías. Pero también podría tener una prueba de integración que muestre que cuando el usuario presiona un botón determinado, se escribe una foto en el directorio y también se puede abrir en el programa.

1

Algunas personas llamarían a una prueba para una DAO una prueba de integración; otros dirían que es una prueba unitaria.

Cualquiera que sea su nombre, yo diría que debería tener una prueba unitaria para todas las funcionalidades DAO y una prueba de integración para el comportamiento de adelante hacia atrás incluido en el caso de uso que dice "darle al usuario la opción de guardar en el sistema de archivos ". Tendría pruebas de integración para ambos escenarios, ya que parece que ambos son posibles en su sistema.

1

Creo que depende de la fuente de su problema. Si la función en sí misma puede tener algunos problemas en diferentes escenarios, puede tener pruebas unitarias para probar estos escenarios sobre su función. Si la integración de su función y otras partes de su programa pueden causar algunos problemas, debería pensar en una prueba de integración. A veces una función como la suya puede necesitar algunos recursos externos para hacer su trabajo no es una mala idea tener algunas pruebas unitarias para ver lo que sucederá si algunos de estos recursos no están disponibles

5
  • pruebas de integración ayudan a validar si su software es funciona correctamente.
  • Pruebas unitarias lo ayudarán a encontrar por qué su software es rompiendo.

Las pruebas unitarias también contribuyen en cierta medida al primer objetivo. Además de que tiene un par de ventajas:

  • Por lo general es mucho más barato que escritura y ejecución una prueba de unidad con un alcance mucho más pequeño.
  • Es más fácil obtener cobertura para la explosión combinatoria de estados de sus componentes usando pruebas unitarias que una prueba de integración. Supongamos que tiene una configuración que implica tres componentes. Cada uno de ellos tiene 3 estados diferentes. Luego, la prueba de integración de toda la configuración implicaría verificar 3 * 3 * 3 = 27 condiciones. La prueba unitaria de los componentes individuales requeriría probar 3 + 3 + 3 = 9 condiciones. (Esto se simplifica demasiado, pero es de esperar que vea el punto.)

Debido a esto, las pruebas unitarias son generalmente más populares que las pruebas de integración. Sin embargo, realmente no puedes prescindir de las pruebas de integración. Las pruebas de integración deben ser la piedra angular utilizada para la aceptación de su software. Tener pruebas unitarias solo demuestra que tiene un montón de cosas haciendo algo. Una prueba de integración demuestra que tiene software de trabajo.