В настоящее время я пишу модульные тесты для встроенного приложения, используя платформу модульного тестирования googles. Теперь мой босс расстроился, что данные, с которыми я тестирую (то есть значения, с которыми я вызываю методы тестируемого класса), жестко привязаны к тестам. Он просит прочитать эти данные из файла. Его аргумент состоит в том, что, таким образом, было бы легче добавить еще один тест для углового случая, о котором раньше забыли. Я не очень разбираюсь в модульных тестах, но пока я делал это не так. Поэтому я попытался выяснить, как лучше всего это сделать - даже если это вообще хорошая идея. Я быстро натолкнулся на подход ДДТ (тестирование на основе данных).
В платформе модульного тестирования Google есть функция, которую они называют "Тесты с параметризацией значений". Благодаря этому мой тестовый прибор становится классом шаблона, и я могу передавать параметры. Однако я вижу некоторые проблемы с этим:
- В настоящее время у меня есть приспособление для каждого тестируемого класса. Но мне понадобится приспособление для каждого тестируемого метода, поскольку для каждого метода требуется свой набор параметров. Это будет много лишней работы.
- Насколько я понимаю, я могу передать только один параметр. Поскольку мне нужно несколько тестов (все параметры моего метода плюс ожидаемые результаты), мне потребуется передать что-то вроде вектора или карты. Опять же, это построение и поиск - это большая работа.
Я мог бы представить себе что-то столь же зрелое, как тестовая среда Google, чтобы упростить задачу. Однако они пишут
Тесты с параметризацией значений пригодятся [когда] вы хотите протестировать свой код на различных входных данных (также известное как тестирование, управляемое данными). Этой функцией легко злоупотребить, поэтому, пожалуйста, проявляйте здравый смысл при ее использовании!
Кроме того, существует этот пост в блоге TotT: Data Driven Traps, также предупреждает меня о (злоупотреблении) модульными тестами, управляемыми данными.
Итак, мой вопрос сводится к следующему:
- Это хорошая идея - проводить модульные тесты на основе данных?
- Как выполнять модульные тесты на основе данных с помощью Google Test Framework
На самом деле я не привязан к googletest и, по сути, могу выбирать любую фреймворк, который мне нравится.
ИЗМЕНИТЬ
Я нашел следующее утверждение в разделе часто задаваемых вопросов в разделе часто задаваемых вопросов googletest.
В Google Test пока нет хорошей поддержки [...] тестов на основе данных в целом. Мы надеемся, что скоро сможем внести улучшения в эту область.