Как мне написать тесты для графической библиотеки? - PullRequest
12 голосов
/ 25 января 2012

Я пишу OpenGL 2D-библиотеку на Python. Все идет отлично, и кодовая база неуклонно растет.

Теперь я хочу написать модульные тесты, чтобы случайно не вводить новые ошибки при исправлении других / создании новых функций. Но я понятия не имею, как они будут работать с графическими библиотеками.

Некоторые вещи, о которых я думал:

  • сделать эталонные скриншоты и сравнить их с автоматически сгенерированными скриншотами в тестах
  • заменить вызовы opengl на операторы регистрации и сравнить журналы

Но оба кажутся плохой идеей. Как обычно тестируют графические библиотеки?

Ответы [ 2 ]

4 голосов
/ 25 января 2012

Подход, который я использовал в прошлом для тестирования на уровне компонентов:

  • Использование равномерного цветного фона с несколькими разными цветами.
  • Использование однородных цветных прямоугольников в качестве графическогообъекты в тестах (с несколькими разными цветами).
  • Поместите прямоугольники в известные места, где вы можете самостоятельно рассчитать их проецируемое положение на изображении.
  • Рассчитать ожидаемую интенсивность каждого канала каждого пикселя(фон, передний план или смесь).
  • Если у вас есть тестовый сценарий, который приводит к некруглым позициям, используйте неточное сравнение (например, корреляцию)
  • Используйте вычисления, чтобы создать ожидаемый результатimages.
  • Сравнение выходных изображений с ожидаемыми результирующими изображениями.
  • Если у вас есть эффект размытия, сравните сумму интенсивности вместо дискретных интенсивностей.

Как сказал Грэмвнутренние модули могут быть тестируемыми без графических вызовов.

2 голосов
/ 25 января 2012

Разбей его еще дальше.

Вызовы, которые делают графику, будут опираться на алгоритмы - протестируйте алгоритмы.

...