Эквивалент протекторов 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. Просто определите класс, который проверяет все, что вам нужно, в его деструкторе, а затем создайте его локальный экземпляр в начале теста. Поскольку он создается первым, он разрушается последним, поэтому он может легко проверить, что тест не изменил ни одного неожиданного состояния.

Если вы хотите, чтобы это проверялось после выполнения всех тестов, вам, вероятно, нужны глобальные фикстуры.

Другие вопросы по тегам