2015-02-17 1 views
2

Я ищу разумный подход для тестирования программного обеспечения на основе шаблонов на C++, где я хочу проверить аргументы шаблона. Если аргумент не соответствует определенным критериям, я хочу, чтобы компилятор выдал ошибку. До сих пор так хорошо ...Лучшая практика с использованием теста повышения и тестов, которые не должны компилироваться

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

Любые предложения по тому, как это решить (лучше всего в моем текущем наборе инструментов: C++, cmake, boost-test, bash, python)?

ответ

1

CMake's try_compile звучит как разумный инструмент для работы.

Основная проблема заключается в том, что try_compile будет работать на времени настройки CMake, что не является лучшим временем для тестирования. Поэтому я предлагаю отделить компиляцию тестов до своего собственного проекта CMake.

Внешний проект CMake затем создаст ваш код по-прежнему и включит пользовательскую цель сборки, которая запускает CMake в тестовом проекте. Таким образом, вы даже можете включить тесты времени компиляции в свой набор CTest.

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