我目前正在使用visual studio在C ++中创建一个2D游戏,并将gtest / gmock用于我的测试框架。我遇到的问题是我不确定我的最佳选择是进行测试。我正在使用SDL和opengl,如果我尝试正常测试,我的测试项目会在遇到任何opengl调用时崩溃。我正在使用glew来访问opengl所以在我的游戏中我设置了glew并在我的窗口类中调用了glew.init():
void Window::Initialize()
{
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "SDL Error", "SDL did not initialize", nullptr);
SDL_Quit();
}
/** All attributes need to be set before window creation **/
p_window = SDL_CreateWindow("Shadow Gods", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1024, 768, SDL_WINDOW_OPENGL);
if (!p_window)
{
LOG("ERROR: SDL window failed to initialize! SDL error: %s\n", SDL_GetError());
SDL_Quit();
}
glContext = SDL_GL_CreateContext(p_window);
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
LOG("ERROR: GLEW failed to initialize!");
SDL_GL_DeleteContext(glContext);
SDL_DestroyWindow(p_window);
SDL_Quit();
}
//Sets the values that the depth and color buffers will be set to when glClear is called
glClearDepth(1.0);
glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
}
现在为了测试我使用openGL调用的任何类,我需要先确保创建一个window对象并在调用任何其他代码之前进行初始化:
#include <gtest\gtest.h>
#include "GameEngine\Window.h"
#include "GameEngine\Sprite.h"
TEST(SpriteClassTest, SpriteInitialize_True)
{
Blz::Window win;
win.Initialize();
Sprite sprite;
ASSERT_TRUE(sprite.Init(23, 32, 100, 100, "../Game/CharImage.png"));
}
我不想为自1开始使用opengl的每个类都做这个。)它是多余的2.)我的测试可能会失败,因为window initialize()函数有问题而不是测试是为...而设计的。那么还有更好的方法吗?