Эквивалент протекторов CppUnit для boost::test?
Я использовал оба CppUnit
а также boost::test
для модульного тестирования C++. Вообще предпочитаю boost::test
Главным образом потому, что макросы автоматического тестирования минимизируют усилия по настройке тестов. Но есть одна вещь, от которой я действительно скучаю CppUnit
: возможность регистрировать свои собственные "протекторы", экземпляры которых автоматически оборачивают все запущенные тесты. (Технически вы устанавливаете тестовый "слушатель", который может обернуть каждый тест в область защиты).
Я нашел это бесценным в прошлом для мониторинга юнит-тестов на неожиданные побочные эффекты (например, проверка кода не изменила флаги состояния юнитов с плавающей запятой). Я не вижу никакого эквивалента в boost::test
документация, хотя BOOST_FIXTURE_TEST_CASE
может быть ближе всего
Любые предложения о том, как лучше всего добиться того же, что и защитники CppUnit в boost::test
?
(Я действительно не смотрел в boost::test
реализации, но если что-то вроде CppUnit
он должен использовать что-то очень похожее на защитники).
1 ответ
Я никогда не использовал CppUnit, поэтому не уверен, как работают защитники. Вы ищете что-то, что оборачивает отдельные тесты или весь набор тестов?
В первом случае вы могли бы использовать приборы, о которых упоминаете, но, насколько я понимаю, приборы следует рассматривать "вне" теста. Они устанавливают все, что нужно для теста, и очищают его впоследствии. Любое реальное тестирование ошибок должно быть в самом тесте, но может быть легко реализовано с помощью RAII. Просто определите класс, который проверяет все, что вам нужно, в его деструкторе, а затем создайте его локальный экземпляр в начале теста. Поскольку он создается первым, он разрушается последним, поэтому он может легко проверить, что тест не изменил ни одного неожиданного состояния.
Если вы хотите, чтобы это проверялось после выполнения всех тестов, вам, вероятно, нужны глобальные фикстуры.