我有一个(类成员)函数,希望避免因歧义导致应用程序崩溃。为此,我已添加了下面所示的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 块,但我希望避免预处理器宏。
提前致谢,
Nikhil
main
(无论如何,在代码的单个点)的断言时可以配置发生什么。现在在测试套件中(您可以检查BSL测试),您可以将assert处理程序配置为唯一异常,以此方式,您可以添加验证代码能够检测自己接口上的UB的测试[...] - David Rodríguez - dribeas