C++ OpenGL如何进行单元测试?
有没有一种使用OpenGL命令对函数或类进行单元测试的好方法 对于C++,我知道我可以让类成为模板,并通过一个类进行直接OpenGL调用:C++ OpenGL如何进行单元测试?,c++,c,unit-testing,opengl,C++,C,Unit Testing,Opengl,有没有一种使用OpenGL命令对函数或类进行单元测试的好方法 对于C++,我知道我可以让类成为模板,并通过一个类进行直接OpenGL调用: namespace myNamespace { struct RealOpenglCall { static inline void glVertex2fv( const GLfloat * v) { ::glVertex2fv( v ); } }; template< typename T > class SomeRendering
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];
};
}
名称空间myNamespace
{
结构RealOpenglCall
{
静态内嵌无效glVertex2fv(常量GLfloat*v)
{::glVertex2fv(v);}
};
模板
类渲染
{
公众:
SomeRendering():v()
{
//第五组
}
作废提款()
{
T::glVertex2fv(v);
}
glv[4];
};
}
在C和C++中,我可以将函数指针传递给调用OpenGL函数的函数(然后通过单元测试,将指针传递给模拟函数)。
我也可以链接不同的库(而不是opengl),但这听起来像是一个很大的复杂问题
那么,调用opengl函数对代码进行单元测试的其他技术还有哪些呢?这是我不久前学到的一个好技巧。您可以使用常规的old
#define
s来模拟各种API函数:
#ifdef _test_
#define glVertex3f(x,y,z) (mockGlVertex3f((x),(y),(z)))
...
#endif
使用已配置的预处理器。根本不需要更改绘图功能。进一步:您可以通过如下方式实现
mockGlVertex3f
,例如检查参数或统计调用它的次数,然后再进行检查。您可以使用单元测试数据,并让模拟函数转储该数据进行比较,如果单元测试与预期输出匹配,则通过单元测试。@datenwolf则它不是单元测试,因为它需要读取磁盘和访问实际数据。这会减慢单位的速度testing@VJo:如何区分真实数据和测试数据?结果也可以转储到内存中。@datenwolf:“如何区分真实数据和测试数据?”
:调用者通过定义\u test\u
来决定这一点,然后调用提供他喜欢的任何数据的函数。数据将由例如mockGlVertex3f()
处理,它可以处理您希望它做的任何事情。不需要加载任何东西。您可以(例如)设置一些简单的int计数器来计算对该函数的调用次数,并打印到std::stringstream