Para cargar o no cargar datos para pruebas unitarias de archivos externos

14

Cuando realizo pruebas unitarias, a menudo me encuentro debatiendo la cantidad de datos a los que envío y espero recibir de mis unidades sometidas a prueba, debo incluir en los archivos de prueba reales.

El compromiso con el que estoy luchando constantemente es:

  • Si una gran parte de la prueba (en volumen de código) consiste en datos de entrada y salida, parece difícil leer la prueba, pero puedo ver fácilmente las entradas y salidas reales.
  • Si cargo los datos de prueba de los archivos, puedo probar fácilmente un montón de variaciones en la posible entrada de datos, reutilizar fácilmente los datos de prueba para múltiples pruebas, pero tengo que dejar el código fuente para ver otro archivo para ver qué es exactamente las entradas son.

¿Alguno de estos es un anti-patrón?

    
pregunta DudeOnRock 20.12.2013 - 20:01

2 respuestas

10

Para responder tu pregunta directamente, no, tampoco creo que sea un antipatrón cuando se usa correctamente.

--- Respuesta más detallada ---

Desde mi experiencia, creo que esto depende en gran medida del objetivo de su prueba. Aquí está la regla de oro que he usado en el pasado y me ayudó a decidir:

¿Realmente estás probando una pequeña unidad de código? (Una verdadera prueba de unidad)

Si es así, entonces es mucho más fácil crear los datos dentro de la prueba exactamente porque puedo ver lo que se está pasando. En estos casos, generalmente buscaré un Jasmine , es una biblioteca para usar porque me parece que facilita la creación y el mantenimiento de los datos de prueba. Sin embargo, esa es una preferencia personal: utilice cualquier cosa que facilite su trabajo.

Si no, entonces probablemente estés probando el sistema. En estos casos, a menudo cargo datos de una fuente externa, las razones aquí son:

  1. Esta prueba no tiene que ver con la claridad del código para los programadores (aunque eso todavía es importante, alguien tiene que mantener esto), se trata de ejecutar suficientes tipos diferentes de datos en toda la parte del sistema para estar razonablemente seguro de que funciona.
  2. A menudo escribiré el código de plomería para cargar y usar los datos de prueba, pero los datos en sí son creados por otra persona (generalmente un miembro del personal de control de calidad en mi caso). Estas personas no suelen ser programadores, así que no puedo esperar que estén editando el código.

La respuesta es breve, depende de lo que estés probando y por qué. Ambos enfoques son útiles y tienen su lugar: elija qué funciona mejor para su situación.

    
respondido por el nadrees 20.12.2013 - 21:17
8

No veo una compensación aquí. Se supone que el código fuente describe algoritmos, o al menos lógica de negocios, no grandes cantidades de datos. Si escribe una transformada de Fourier, desea verificar que un tono sinusal se asigne correctamente a un solo pico, un sonido mixto a más picos, etc., pero para eso es completamente suficiente para introducir un archivo llamado sinus.wav en la rutina y verifique que la estructura de salida es lo que usted espera.

Claro, técnicamente no tienes una garantía inmediata de que sinus.wav realmente contenga un tono sinusal, pero como dijiste, enumerar los 100.000 valores de amplitud en la fuente tampoco te da eso, de hecho, es peor , porque al menos puede reproducir un archivo externo con un reproductor de audio para verificar, mientras que los valores de los datos ocultos en el código fuente son esencialmente imposibles de hacer con ellos.

    
respondido por el Kilian Foth 21.12.2013 - 11:16

Lea otras preguntas en las etiquetas