Estoy trabajando en el procesamiento de imágenes (principalmente OCR) y me pregunto cómo debería integrar las pruebas unitarias en mi desarrollo.
Ya estoy usando pruebas unitarias para un tipo de código más "común", pero cuando trato con código de procesamiento de imágenes no estoy seguro de cómo tratarlo. Este tipo de código siempre necesita algo de entrada / salida de datos de imagen y burlarse de esto no es obvio. Por ahora, principalmente estoy haciendo pruebas de integración, pero tardan un tiempo en ejecutarse y me gustaría tener algunas ideas sobre cómo dividir este tipo de código en pruebas unitarias para poder ejecutarlas más rápidamente.
Editar: el análisis de un personaje puede pasar por muchos pasos que involucran múltiples operaciones de rotación, escala y morfología. Estos pasos cambian a menudo a medida que se desarrolla el algoritmo. Por lo tanto, la entrada y la salida esperada pueden evolucionar mucho durante las pruebas. Cada carácter puede tener 100x100 píxeles, por lo que no es posible codificarlos en el código o trabajar con los datos generados.
fuente
Respuestas:
Trabajo con software de grabación / análisis / transmisión de video y enfrentamos un problema muy similar. A continuación se muestra nuestra solución, no estoy seguro de cómo funcionará a largo plazo, pero por ahora parece funcionar.
Guarde las imágenes de entrada / salida como recursos en su proyecto de prueba de unidad. Luego, haga que la prueba unitaria verifique que cuando se proporciona una entrada específica, se produce esa salida específica.
9/10 veces cuando refactoriza el código y agrega otra funcionalidad, es de esperar que el comportamiento de sus rutinas de manejo de imágenes no cambie, por lo que si de repente todas las pruebas unitarias comienzan a fallar, es probable que se deba a un error.
Por otro lado, si realiza cambios en el algoritmo real, eso también dará como resultado una falla en la prueba de la unidad. En este caso, tendría que verificar manualmente / visualmente que los resultados son correctos y, si se ven bien, actualizar los recursos de imagen para que la prueba de la unidad pase nuevamente.
En nuestro proyecto, terminamos desarrollando fuentes de video "falsas" (o simulacros si lo desean), que pueden proporcionarnos datos tanto de entrada como de salida. Pero los datos en sí no son falsos, en realidad se capturaron utilizando clases de registro de datos auxiliares de un sistema en ejecución cuando realizamos pruebas manuales y verificamos que todo funcionaba.
fuente