2011-03-11 8 views
6

¿Hay alguna manera de probar la unidad de una función o una clase con los comandos de OpenGL?OpenGL ¿Cómo analizar la unidad?

para C++, sé que podría hacer que la clase una plantilla y pasar una clase haciendo llamadas OpenGL directos:

namespace myNamespace 
{ 
struct RealOpenglCall 
{ 
    static inline void glVertex2fv(const GLfloat * v) 
    { ::glVertex2fv(v); } 
}; 

template< typename T > 
class SomeRendering 
{ 
    public: 
    SomeRendering() : v() 
    { 
     // set v 
    } 
    void Draw() 
    { 
     T::glVertex2fv(v); 
    } 
    GLfloat v[4]; 
}; 

} 

en C y C++, podría pasar punteros de función a las funciones de llamada funciones de OpenGL (a continuación para pruebas unitarias que pasan punteros para simular funciones).

También podría vincular con una biblioteca diferente (en lugar de opengl), pero eso parece una gran complicación.

Entonces, ¿cuáles son otras técnicas para el código de prueba de unidad que llama a las funciones de OpenGL?

Respuesta

4

Este es un buen truco que aprendí hace un tiempo. Puede utilizar regulares viejos #define s para hacerle burlas de todo tipo de funciones de la API:

#ifdef _test_ 
#define glVertex3f(x,y,z) (mockGlVertex3f((x),(y),(z))) 
... 
#endif 

Con un preprocesador configurado. No hay necesidad de cambiar sus funciones de dibujo en absoluto. Además: puede implementar mockGlVertex3f de tal forma que, p. verifica los argumentos o cuenta el número de llamadas que luego pueden verificarse.

+0

Puede usar datos de pruebas unitarias y hacer que las funciones de burla vuelquen esos datos para comparar, pasando la prueba unitaria si coincide con la salida esperada. – datenwolf

+0

absolutamente. :-) –

+0

@datenwolf Entonces no es una prueba unitaria, ya que necesitaría leer el disco y acceder a datos reales. Eso ralentiza la prueba unitaria –