2011-03-11 124 views
6

有没有一种很好的方法来使用OpenGL命令对函数或类进行单元测试?OpenGL如何进行单元测试?

对于C++,我知道我可以做类模板,并通过一类做直接的OpenGL调用:

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]; 
}; 

} 

在C和C++中,我可以通过函数指针调用OpenGL函数的函数(然后单元测试传递指向模拟函数的指针)。

我也可以链接不同的库(而不是opengl),但这听起来像一个很大的复杂。

那么,有什么其他技术来调用opengl函数的单元测试代码?

回答

4

这是我学到的一个很好的把戏。您可以使用普通的旧#define s到让你嘲笑各种API函数:

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

与配置的预处理器。根本不需要改变你的绘图功能。此外:您可以通过例如mockGlVertex3f的方式实现它。检查参数或计算对它的调用次数,然后可以检查它们的次数。

+0

您可以使用单元测试数据并使模拟函数转储该数据以进行比较,如果它与预期输出匹配则传递单元测试。 – datenwolf 2011-03-11 09:38:52

+0

绝对。 :-) – 2011-03-11 09:42:58

+0

@datenwolf然后它不是一个单元测试,因为它需要读取磁盘并访问真实数据。这会减慢单元测试 – 2011-03-11 13:43:48

相关问题