【问题标题】:How to tell Boost.Test to stop on first failing test case?如何告诉 Boost.Test 在第一个失败的测试用例上停止?
【发布时间】:2012-05-02 08:13:40
【问题描述】:

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

但是,在执行所有测试时,它们都会被执行——无论有多少失败或通过。我知道,我可以通过使用BOOST_REQUIRE 而不是BOOST_CHECK 来停止执行一个测试用例并进行多次检查。但这不是我想要的。

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

【问题讨论】:

  • BOOST_REQUIRE_THROW 将抛出异常,因此应该停止整个测试套件的执行。
  • 谢谢@rhalbersma。我会试试的。你为什么不做一个答案呢?
  • Ehm,因为在仔细阅读了 Boost.Test 手册之后,该建议是不准确的。 BOOST_REQUIRE_THROW 是检查是否抛出异常的单元测试。它不会自己扔。

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


【解决方案1】:

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

伯努瓦。

【讨论】:

  • 感谢这个 hack :) 但是在每个测试用例中调用 in_/out_strategy 有点接近 DRY 原则。是否有可能为每个测试用例全局(或每个测试套件)定义 beforeafter 固定装置运行?或者,必须重新定义 BOOST_AUTO_TEST_CASE 等。
  • @Torbjoern - 将输入/输出策略调用放入夹具的 ctor/dtor 中。分别为 每个 测试用例创建和销毁夹具。 Quanteek - 可能想在你的答案中包含这个?
  • BOOST_TEST 和 BOOST_CHECK 有什么区别?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 2016-01-24
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多