6

我的应用程序中有一些日志记录(它恰好是 log4cxx,但我对此很灵活),并且我有一些使用 boost 单元测试框架的单元测试。当我的单元测试运行时,我会从通过和失败的测试中获得大量的日志输出(不仅仅是记录的提升断言,还有我自己的应用程序代码的调试日志)。我想让单元测试框架在通过的测试期间丢弃日志,并从失败的测试中输出日志(我在使用 python/nose 时逐渐欣赏这种行为)。

使用 boost 单元测试框架是否有一些标准的方法来做到这一点?如果没有,是否有一些测试开始/测试结束钩子可以用来缓冲我的日志并有条件地输出它们以自己实现这种行为?

4

2 回答 2

0

您可以为此目的使用测试开始和测试结束挂钩。要设置这些钩子,您需要定义boost::unit_test::test_observer的子类,创建将在整个测试中持续存在的类的实例(静态全局对象或BOOST_TEST_GLOBAL_FIXTURE),然后将类传递给boost::unit_test::framework::register_observer

用测试钩子开始覆盖test_unit_start的方法是,用测试钩子结束覆盖的方法是test_unit_finish。但是,这些钩子会为测试套件和单个测试用例触发,这可能是一个问题,具体取决于钩子的设置方式。该test_unit_finish钩子也没有明确告诉您给定的测试是否真的通过了,而且似乎没有一种清晰明了的方法来获取该信息。有一个boost::unit_test::results_collector单例,它有一个results()方法,如果你通过它test_unit_id提供给的测试单元test_unit_finish,你会得到一个test_results对象,它有一个 pass ()方法。我真的看不出有办法得到test_unit_id这显然是公共 API 的一部分——您可以直接访问 p_id 成员,但这在未来的 boost 版本中总是会改变。您还可以使用test_observer 子类中的 , , 和 钩子手动跟踪每个测试是通过还是失败(assertion_result只要exception_caughttest_unit_aborted的参数为 false 就表示当前测试失败,如果调用它,则所有其他钩子都表示失败) .test_unit_timed_outassertion_result

于 2019-07-20T15:37:49.580 回答
-1

根据Boost.Test 文档,使用--log_level=error. 这将只捕获失败的测试用例。

我检查了它是否可以BOOST_CHECK(false)在具有数千个单元测试的其他正确运行的项目上使用。

运行 with--log_level=all给出所有断言的结果。我通过管道检查wc -l了日志中的行数是否与测试中的断言数完全相同(该数字也由 报告--report_level=detailed)。您当然也可以grep记录字符串errorfailed.

于 2013-06-09T20:50:25.023 回答