Estoy escribiendo un juego y el motor de gráficos que lo acompaña en la parte superior de OpenGL en C ++. También soy fanático de los buenos procesos de codificación y las pruebas automatizadas. Las pruebas de código de gráficos + parecen bastante inmiscibles, ya que la salida a menudo es solo visual, o muy orientada a lo visual.
Por ejemplo, imagine analizar el flujo de imágenes sin procesar que se procesa en la pantalla byte a byte: necesita datos de prueba para comparar, lo cual es difícil de crear / obtener, y a menudo las imágenes renderizadas no son idénticas en un nivel de byte cuando se ejecuta en diferentes momentos: pequeños cambios en los algoritmos arruinarán por completo este enfoque.
Estoy pensando en crear un conjunto de pruebas unitarias visuales, en el que básicamente pueda renderizar diferentes escenas de prueba, mostrando cosas como mapeo de sombras, animación, etc., etc. Como parte de CI, estas escenas se mostrarán en un video archivo (o posiblemente dejarlo como un ejecutable) con diferentes métricas. Esto aún requeriría una inspección manual del archivo de video, pero al menos sería algo automatizado y estandarizado.
¿Qué piensas? ¿Espero que haya mejores maneras?
Respuestas:
La biblioteca de procesamiento de imágenes opencv lo hace guardando la imagen y comparándola con una imagen de referencia; tiene un montón de funciones de prueba y macros de c ++ para manejar la coincidencia aproximada de imágenes, etc.
fuente
Su marco de prueba puede representar su imagen de prueba en un búfer, recuperar la imagen renderizada y compararla con una imagen de referencia "dorada" que se haya generado previamente para ese propósito.
Esto no funcionará tan bien en los casos en que no se espera que los resultados de su prueba sean exactamente los mismos. Sin embargo, puede calcular la diferencia al cuadrado de la prueba y las imágenes de referencia, y compararla con un umbral.
También es posible que desee proporcionar datos de rendimiento de registro y verificación, ya que una regresión importante en el rendimiento es otro modo de falla posible.
fuente
Incluso si no puede comparar las imágenes de salida, al menos podrá probar que sus renderizaciones se completen adecuadamente (sin bloqueos, largas esperas, etc.). Encontrar una manera de verificar las imágenes es mejor, por supuesto, pero incluso sin ella habrás obtenido algo de las pruebas.
fuente