Как написать тесты для графической библиотеки?

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

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

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

  • сделайте ссылки на скриншоты и сравните их с автогенерированными скриншотами в тесте
  • заменить вызовы opengl с помощью операторов протоколирования и сравнить журналы

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

Ответ 1

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

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

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

Ответ 2

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

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