2011-12-12 3 views
2

Я пишу модульные тесты, используя Boost.Test против некоторой старой математической библиотеки C. Одна из проверенных функций, в которой известно, что для некоторых заданных входных данных возникает системное исключение Integer Division By Zero. Предположим, что это желаемое поведение, и я хочу написать отрицательный тест для этого случая.Как обрабатывать целочисленное подразделение Исключением нуля с использованием библиотеки Boost.Test?

BOOST_REQUIRE_THROW(statement, exception); не работает для меня, так как это исключение стиля C++ (этот макрос использует try {} catch {} внутренне).

Каков правильный способ обработки корпуса, когда я ожидаю сбой на системном уровне?

+0

Если вы используете Windows, вы можете использовать Structured Exception Handling (SEH), чтобы поймать div на 0. –

+0

Является ли это ОС Windows? – lapk

+0

На какой ОС вы работаете? – Lalaland

ответ

1

Поскольку это Windows, я предлагаю посмотреть на _set_se_translator() Windows API. Он позволяет обрабатывать Structured Exception с C++ catch.

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

+0

Хорошо, я думаю, что я углубись в это. Я думаю, что я могу получить аналогичный эффект, установив «Включить исключения C++» на «Да с исключениями SEH (/ EHa)» в параметрах проекта Visual Studio. – Mickey