Я начал новый игровой проект и решил изучить и использовать OpenGL для него (проект разрабатывается одновременно в Windows и Linux). В то же время я также очень заинтересован в Test Driven Development и стараюсь приложить все усилия для написания моих модульных тестов, чтобы привести дизайн до того, как он будет действовать.
Однако, я думаю, что моя нехватка знаний может сбить меня с толку, и я продолжаю ударять по стене, пытаясь написать свои модульные тесты для "рендеринга" частей кодовой базы. Я надеюсь, кто-то может дать мне некоторое представление о том, как продолжить.
Я знаю, что мне нужно unit test взаимодействие с OpenGL, а не OpenGL. Единственный способ, с помощью которого я могу это сделать, - отвлечь OpenGL от остальной части моего кода до некоторой степени, перехватывая вызовы функций OpenGL или создавая новый интерфейс класса, позволяя мне создать макетную версию этого класса для испытаний. (Еще лучше было бы абстрагировать их до набора неклассических функций в отдельном пространстве имен, а не в абстракциях виртуального класса, но я не вижу, как я мог это высмеять.)
Однако, поскольку я все еще изучаю OpenGL, у меня есть только представление о том, как должна выглядеть эта абстракция. Например, должен ли я обернуть каждый вызов OpenGL или сгруппировать их в функции более высокого уровня на основе задач, которые необходимо выполнить? Тонкие обертки сделают немного больше, чем вызов определенной функции OpenGL, поэтому мне не нужно было бы их проверять заранее, но я мог бы получить большое количество функций для обертывания. Опять же, если я зашел слишком далеко и сгруппировал несколько OpenGL-вызовов вместе по задаче, я чувствую, что в конечном итоге я начну с того, что с большим количеством кода с использованием OpenGL, который сам должен быть протестирован перед использованием.
Где средняя точка? Как я могу научиться использовать OpenGL и в то же время выполнять надлежащее модульное тестирование заранее?