Эквивалент протекторов CppUnit для boost :: test? - PullRequest
2 голосов
/ 23 апреля 2009

Я использовал и CppUnit, и boost::test для тестирования юнитов C ++. Обычно я предпочитаю boost::test, главным образом потому, что макросы автоматического тестирования минимизируют усилия по настройке тестов. Но есть одна вещь, которую я действительно упускаю из CppUnit: возможность регистрировать свои собственные «защитники», экземпляры которых автоматически оборачивают все запущенные тесты. (Технически вы устанавливаете тестовый «слушатель», который может обернуть каждый тест в область защиты).

В прошлом я обнаружил, что они неоценимы для мониторинга юнит-тестов на наличие неожиданных побочных эффектов (например, проверка кода не изменила флаги состояния юнитов с плавающей запятой). Я не вижу ни одного эквивалента в boost::test документации , хотя BOOST_FIXTURE_TEST_CASE может быть ближе всего.

Любые предложения о том, как лучше всего добиться того же, что и у защитников CppUnit в boost::test?

(На самом деле я еще не изучал реализацию boost::test, но если это что-то вроде CppUnit, оно должно использовать что-то очень похожее на защитники).

1 Ответ

2 голосов
/ 23 апреля 2009

Я никогда не использовал CppUnit, поэтому не уверен, как работают защитники. Вы ищете что-то, что оборачивает отдельные тесты или весь набор тестов?

В первом случае вы могли бы использовать приборы, о которых упоминаете, но, насколько я понимаю, приборы следует рассматривать "вне" теста. Они устанавливают все, что нужно тесту, и очищают его потом. Любое реальное тестирование ошибок должно быть в самом тесте, но может быть легко реализовано с помощью RAII. Просто определите класс, который проверяет все, что вам нужно, в его деструкторе, а затем создайте его локальный экземпляр в начале теста. Поскольку он создается первым, он разрушается последним, поэтому он может легко проверить, что тест не изменил ни одного неожиданного состояния.

Если вы хотите проверить это после всех испытаний, вы, вероятно, захотите global fixtures

...