我有一个(类成员)函数,我希望避免由于歧义而导致应用程序崩溃。为此,我添加了一个 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块,但我希望避免使用预处理器宏。
提前致谢,
尼基尔