2011-03-11 169 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

相關問題