如何为我的c ++游戏项目正确设置单元测试?

时间:2017-06-18 01:45:55

标签: c++ unit-testing opengl sdl

我目前正在使用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()函数有问题而不是测试是为...而设计的。那么还有更好的方法吗?

0 个答案:

没有答案