OpenGL Как провести модульное тестирование? - PullRequest
6 голосов
/ 11 марта 2011

Есть ли хороший способ для модульного тестирования функции или класса с помощью команд 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?

1 Ответ

5 голосов
/ 11 марта 2011

Вот хороший трюк, который я выучил некоторое время назад. Вы можете использовать обычные старые #define s, чтобы позволить вам высмеивать все виды функций API:

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

С настроенным препроцессором. Нет необходимости менять свои функции рисования вообще. Далее: вы можете реализовать mockGlVertex3f таким образом, чтобы это, например, проверяет аргументы или подсчитывает количество обращений к нему, которое затем можно проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...