Я работаю в области обработки изображений (в основном OCR), и мне интересно, как мне интегрировать модульные тесты в мою разработку.
Я уже использую модульные тесты для более «распространенного» типа кода, но когда имею дело с кодом обработки изображений, я не уверен, как с этим справиться. Этот вид кода всегда требует ввода / вывода данных изображения, и это не очевидно. В настоящее время я в основном делаю интеграционные тесты, но они требуют времени для запуска, и мне хотелось бы поделиться некоторыми идеями о том, как разбить этот вид кода на модульные тесты, чтобы я мог выполнять их быстрее.
Редактировать: анализ персонажа может пройти множество этапов, включающих несколько поворотов, масштабирование и морфологические операции. Эти шаги часто меняются по мере разработки алгоритма. Таким образом, входные и ожидаемые результаты могут сильно измениться во время тестирования. Каждый символ может иметь размер 100x100 пикселей, поэтому жесткое его кодирование в коде или работа с сгенерированными данными не подлежат сомнению.
источник
Ответы:
Я работаю с программным обеспечением для записи видео / аналитики / потоковой передачи, и мы столкнулись с очень похожей проблемой. Ниже было наше решение, не знаю, как оно будет работать в долгосрочной перспективе, но сейчас, похоже, оно работает.
Сохраните входные / выходные изображения в качестве ресурсов в вашем модульном тестовом проекте. Затем проведите модульный тест, чтобы убедиться, что при задании конкретного ввода, этот конкретный вывод производится.
9/10 раз, когда вы реорганизуете код и добавляете другие функциональные возможности, вы можете ожидать, что поведение ваших процедур обработки изображений не изменится, поэтому, если внезапные модульные тесты начинают давать сбои, это, вероятно, связано с ошибкой.
С другой стороны, если вы внесете изменения в фактический алгоритм, это также приведет к сбою модульного теста. В этом случае вам придется вручную / визуально проверить правильность результатов и, если они выглядят хорошо, обновить ресурсы изображения, чтобы снова выполнить модульный тест.
В нашем проекте мы закончили разработку «поддельных» (или поддельных, если хотите) видеоисточников, которые могут передавать нам данные как для ввода, так и для вывода. Но сами данные не являются поддельными, они фактически были получены с использованием вспомогательных классов записи данных из работающей системы, когда мы запускали ручные тесты и проверяли, что все работает.
источник