Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ noexcept、断言处理程序和单元测试_C++_Unit Testing_Noexcept - Fatal编程技术网

C++ noexcept、断言处理程序和单元测试

C++ noexcept、断言处理程序和单元测试,c++,unit-testing,noexcept,C++,Unit Testing,Noexcept,我正在开发一个类似于LEST的测试框架,其中我提供了一个宏来检查给定表达式是否触发来自BOOST_ASSERT宏的运行时断言。这是通过使用BOOST_ASSERT_处理程序将断言转换为assertion_失败异常并让宏捕获它并报告捕获成功来完成的 问题是,我们有一系列的函数被测试为: float foo(int x) noexcept { BOOST_ASSERT(x > 1); return x/(x-1.f); } 这个noexcept规范被正确地设置为——除了在单元测试

我正在开发一个类似于LEST的测试框架,其中我提供了一个宏来检查给定表达式是否触发来自BOOST_ASSERT宏的运行时断言。这是通过使用BOOST_ASSERT_处理程序将断言转换为assertion_失败异常并让宏捕获它并报告捕获成功来完成的

问题是,我们有一系列的函数被测试为:

float foo(int x) noexcept
{
   BOOST_ASSERT(x > 1);
   return x/(x-1.f);
}
这个noexcept规范被正确地设置为——除了在单元测试期间,函数实际上是noexcept。当然,在测试过程中,一切都会随着BOOST_ASSERT的抛出而发生变化

解决这个问题的一个想法是让断言填充一个全局唯一的\u ptr,以标记断言被触发。但是,它失败了,因为控制流仍然运行错误代码


对于这个问题,什么样的解决方案最优雅,对测试代码的更改最少?使用exception和set_terminate是有效的解决方案吗?

根据我的经验,这是您需要放弃BOOST_测试并使用GOOGLE_测试的时候,因为它可以通过死亡测试功能完美地处理这种情况。你做得越早,痛苦就越小。我不是在使用Boost.Test,而是一个定制的lighteight测试系统。我们来看看Google测试是如何处理的,请看这里:根据我的经验,搜索“死亡测试”此时您需要放弃BOOST_测试并使用Google_测试,因为它通过死亡测试功能完美地处理了这种情况。你做得越早,痛苦就越小。我不是在使用Boost.Test,而是一个定制的lighteight测试系统。我们来看看谷歌测试是如何处理的,看看这里:搜索“死亡测试”