如何告诉Boost.Test在第一次失败的测试用例时停止?

时间:2012-04-20 18:15:35

标签: c++ unit-testing boost boost-test

我在几个测试套件中订购了许多Boost测试用例。一些测试用例有一个,多一个检查。

然而,当执行所有测试时,它们都会被执行 - 无论有多少失败或通过。我知道,我可以使用BOOST_REQUIRE代替BOOST_CHECK来停止执行一个包含多项检查的测试用例。但那不是我想要的。

在第一个测试用例失败后,如何告诉Boost停止整个执行?我更喜欢在运行时解决方案(即运行时参数)上编译的解决方案(例如,用全局夹具实现)。

2 个答案:

答案 0 :(得分:4)

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()

贝努瓦。

答案 1 :(得分:1)

为什么不使用assert?您不仅可以立即中止整个程序,还可以在必要时查看堆栈。