我在几个测试套件中订购了许多 Boost 测试用例。有的测试用例有一个,有的不止一个。
但是,在执行所有测试时,它们都会被执行——无论有多少失败或通过。我知道,我可以通过使用BOOST_REQUIRE
而不是BOOST_CHECK
. 但这不是我想要的。
在第一个测试用例失败后,如何告诉 Boost 停止整个执行?在运行时解决方案(即运行时参数)上,我更喜欢编译的解决方案(例如,使用全局夹具实现)。
我在几个测试套件中订购了许多 Boost 测试用例。有的测试用例有一个,有的不止一个。
但是,在执行所有测试时,它们都会被执行——无论有多少失败或通过。我知道,我可以通过使用BOOST_REQUIRE
而不是BOOST_CHECK
. 但这不是我想要的。
在第一个测试用例失败后,如何告诉 Boost 停止整个执行?在运行时解决方案(即运行时参数)上,我更喜欢编译的解决方案(例如,使用全局夹具实现)。
BOOST_REQUIRE 将停止测试套件中的当前测试用例,但继续其他测试用例。
当您要求“编译解决方案”时,我并没有真正看到您想要什么,但这是一个应该有效的技巧。我使用布尔值来检查整个测试套件的稳定性。如果它不稳定,即触发了 BOOST_REQUIRE,那么我将停止整个过程。
希望它可以帮助你。
//#include <...>
//FIXTURES ZONE
struct fixture
{
fixture():x(0.0),y(0.0){}
double x;
double y;
};
//HELPERS ZONE
static bool test_suite_stable = true;
void in_strategy(bool & stable)
{
if(stable)
{
stable = false;
}
else
{
exit();
}
}
void out_strategy(bool & stable)
{
if(!stable)
{
stable = true;
}
}
BOOST_AUTO_TEST_SUITE(my_test_suite)
//TEST CASES ZONE
BOOST_FIXTURE_TEST_CASE(my_test_case, fixture)
{
in_strategy(test_suite_stable);
//...
//BOOST_REQUIRE() -> triggered
out_strategy(test_suite_stable);
}
BOOST_FIXTURE_TEST_CASE(another_test_case, fixture)
{
in_strategy(test_suite_stable); //-> exit() since last triggered so stable = false
//...
//BOOST_REQUIRE()
out_strategy(test_suite_stable);
}
BOOST_TEST_SUITE_END()
贝努瓦。
为什么不直接使用断言?您不仅可以立即中止整个程序,还可以在必要时查看堆栈。