【问题标题】:Boost unit test failure detected in wrong test suite在错误的测试套件中检测到 Boost 单元测试失败
【发布时间】:2009-07-23 16:12:21
【问题描述】:

我目前正在学习如何使用 Boost 测试库,但我似乎无法让测试套件正常工作。在以下代码中,“test_case_1”正确失败,但报告为在主测试套件中,而不是“test_suite_1”。

有人知道我做错了什么吗?

#define BOOST_AUTO_TEST_MAIN
#include <boost/test/auto_unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test_suite_1);

BOOST_AUTO_TEST_CASE(test_case_1) {
    BOOST_REQUIRE_EQUAL(1, 2);
}

BOOST_AUTO_TEST_SUITE_END();

编辑:

Ovanes 的回答让我更好地理解了套件层次结构——在这种情况下,test_suite_1 是根套件的子套件,默认情况下被命名为“主测试套件”。默认日志只显示根套件,这不是我所期望的,我可以处理它:)

您可以通过定义 BOOST_TEST_MODULE 来设置根套件名称 - 因此上述示例的替代版本会给出预期的错误消息:

#define BOOST_TEST_MODULE test_suite_1
#define BOOST_AUTO_TEST_MAIN

#include <boost/test/auto_unit_test.hpp>

BOOST_AUTO_TEST_CASE(test_case_1) {
    BOOST_REQUIRE_EQUAL(1, 2);
}

【问题讨论】:

  • 我很高兴我找到了这个,但我完全被这种行为吓到了。由于您只能使用一次BOOST_TEST_MODULE,这是否意味着每个单元测试可执行文件基本上只有一个套件?并且所有测试失败都将作为该套件的成员报告,没有子套件名称?当然,我在这里遗漏了一些东西。编辑:格式化

标签: c++ unit-testing boost


【解决方案1】:

这取决于您如何配置记录器来生成报告。例如,传递给您的示例 --log_level=all 将产生以下输出:

Running 1 test case...
Entering test suite "Master Test Suite"
Entering test suite "test_suite_1"
Entering test case "test_case_1"
d:/projects/cpp/test/main.cpp(9): fatal error in "test_case_1": critical check 1 == 2 failed [1 != 2]
Leaving test case "test_case_1"
Leaving test suite "test_suite_1"
Leaving test suite "Master Test Suite"

*** 1 failure detected in test suite "Master Test Suite"

这里是Boost Test Framework的命令行配置选项的链接。

问候,
风向标

【讨论】:

    【解决方案2】:

    另外,一旦定义了 BOOST_TEST_MODULE,就不需要定义 BOOST_AUTO_TEST_MAIN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2013-08-30
      • 2023-03-21
      • 1970-01-01
      • 2023-01-22
      • 2019-11-29
      相关资源
      最近更新 更多