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

17

Cuando realizo pruebas unitarias, a menudo me encuentro debatiendo la cantidad de datos con los que me alimento, y espero volver de mis unidades bajo prueba, debo incluirlos en los archivos de prueba reales.

La compensación con la que lucho constantemente es:

  • Si una gran parte de la prueba (en el volumen del código) consta de 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 sobre 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 exactamente cuáles son las entradas .

¿Alguno de estos es un antipatrón?

DudeOnRock
fuente
¿Qué tipos de datos?
Jon Reid
@ JonReid: Principalmente texto.
DudeOnRock

Respuestas:

11

Para responder a su 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. Esta es la regla general 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 unitaria)

En caso afirmativo, he descubierto que es mucho más fácil crear los datos dentro de la prueba en sí misma exactamente porque puedo ver lo que se está pasando. En estos casos, generalmente buscaré una biblioteca similar a Jasmine para usar porque encuentro que facilita la creación y el mantenimiento de los datos de prueba. Sin embargo, esa es una preferencia personal: use lo que haga que su trabajo sea más fácil.

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

  1. Esta prueba no se trata de la claridad del código para los programadores (aunque eso sigue siendo importante, alguien tiene que mantener esto), se trata de ejecutar suficientes tipos diferentes de datos en todo el fragmento del sistema para estar razonablemente seguros 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, por lo que no puedo esperar que estén editando código.

Tan larga respuesta corta, depende de lo que esté probando y por qué. Ambos enfoques son útiles y tienen su lugar: elija lo que funcione mejor para su situación.

nadrees
fuente
9

No veo una compensación aquí. Se supone que el código fuente describe algoritmos, o al menos la lógica de negocios, no grandes cantidades de datos. Si escribe una transformación de Fourier, desea verificar que un tono sinusal esté correctamente asignado a un solo pico, un sonido mixto a más picos, etc., pero para eso es completamente suficiente alimentar un archivo nombrado sinus.waven la rutina y verificar que La estructura de salida es lo que espera.

Claro, técnicamente no tienes una garantía inmediata que sinus.wavrealmente 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 datos enterrados en el código fuente son esencialmente imposibles de hacer.

Kilian Foth
fuente