Как написать модульный тест для функции, которая выполняет преобразование координат и перспективную проекцию - PullRequest
0 голосов
/ 04 января 2019

У меня есть функция, которая преобразует некоторые 3d-точки в систему координат камеры, а затем проецирует эти точки на изображение с камеры. Я изо всех сил пытаюсь найти способ сделать это тестируемым. Эта функция использует другие более простые функции, которые выполняют одну задачу (например, преобразование координат и т. Д.) И уже имеют тесты.

Теперь мне приходит в голову взять эту функцию, используемую для выполнения проецирования, а затем самостоятельно проверить, имеет ли смысл результат, посмотрев, где точки были спроецированы на изображении rgb и соответствуют ли они объекту, который они представляют. (Например, 3D точки, представляющие шар, будут покрывать пиксели, представляющие шар на изображении после проецирования). Затем я мог бы использовать эти несколько примеров реальных данных в модульном тесте. Но это будет означать, что мне нужно загрузить в репозиторий git вместе с тестами.

Я также мог бы генерировать виртуальные данные, но это не так легко проверить, была ли проекция правильной, потому что мне сначала понадобится та же функция, чтобы сгенерировать изображение rgb, которое соответствует 3d точкам. Мне кажется, что это своего рода проблема курицы с яйцом.

Я использую Python и Numpy.

Есть предложения?

1 Ответ

0 голосов
/ 04 января 2019

Я думаю, что здесь есть две вещи, не путайте их:

Например, есть модульные тесты. Модульные тесты должны быть максимально простыми и охватывать наименьший возможный код за раз. Разделите преобразование на самые простые шаги, дайте каждому свою функцию, затем вы сможете составить простые примеры, содержащие 0, 1, пи и т. Д. Эти образцы могут быть проверены человеком с помощью ручки и бумаги.

Другая часть - это регрессионные тесты. Вы убедились, что преобразование в настоящее время делает правильные вещи, выполнив визуальную проверку. Затем просто выберите несколько точек данных, возможно, некоторые граничные точки (или некоторые интересные ограничения), и используйте их в тесте. Нет причин загружать много данных в git, просто добавьте несколько текстовых строк, содержащих входные и выходные данные в вашем тестовом коде. Это займет больше усилий, чтобы следовать с ручкой и бумагой, но вы подтвердили правильность визуально.

...