У меня есть функция (член класса), которую я хочу избежать сбоя приложения из-за неоднозначности. Для этой цели я добавил блок try catch, как показано ниже:
void getGene(unsigned int position){
T val;
try {
val = _genome.at(_isCircular ? position % _genome.size() : position);
}
catch (std::exception& e) {
std::cerr << "Error in [" << __PRETTY_FUNCTION__ << "]: "
<< e.what() << std::endl;
exit(1);
}
return val;
}
Теперь я хочу добавить модульный тест Boost, который я думал сделать что-то вроде
BOOST_AUTO_TEST_CASE(nonCircularGenome_test){
// set size to 10
test.setSize(10);
// set non circular
test.setNonCircular();
// gene at site # 12 does not exist in a 10-site long genome, must throw an exception
BOOST_CHECK_THROW(test.getGene(12), std::out_of_range);
Проблема в том, что я не могу заставить обе эти вещи работать. Блок try-catch хорошо работает в настройке выпуска. Однако этот тест работает, только если я удалю блок try-catch и позволю функции выдать исключение.
Каков наилучший способ заставить обе эти вещи работать, чтобы пользователю было предложено исправить ошибку на ходу, а тесты явно проверяли при отладке? Одним из способов является использование блоков #ifdef/#endif DEBUG, но я хочу избежать макросов препроцессора.
Заранее спасибо,
Нихил