我是否可以仅针对具有升压单元测试的故障获取日志输出

时间:2013-06-08 23:32:28

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

我的应用程序中有一些日志记录(它恰好是log4cxx,但我很灵活),并且我使用boost单元测试框架进行了一些单元测试。当我的单元测试运行时,我从传递和失败的测试中获得了大量的日志输出(不仅记录了boost断言,而且我自己的应用程序代码的调试记录也是如此)。我想让单元测试框架在测试过程中丢弃日志,并从失败的测试中输出日志(我在使用python / nose时逐渐意识到这种行为)。

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

2 个答案:

答案 0 :(得分:0)

有用于此目的的测试开始和测试挂钩。要设置这些挂钩,您需要定义here的子类,创建将在整个测试中保留的类的实例(静态全局对象或boost::unit_test::test_observer),然后通过类BOOST_TEST_GLOBAL_FIXTURE

以测试钩子开头替代的方法为test_unit_start,以测试钩子结尾替代的方法为test_unit_finish。但是,这些挂钩既可以用于测试套件,也可以用于单个测试用例,这取决于挂钩的设置方式可能是一个问题。 test_unit_finish钩子也没有明确告诉您给定的测试是否确实通过了,并且似乎没有一种清晰明了的方式来获取该信息。有一个boost::unit_test::framework::register_observer单例,它具有一种boost::unit_test::results_collector方法,如果将它传递给test_unit_id的测试单元的test_unit_finish,则会得到一个{{3}具有results()方法的}对象。我真的看不出有一种方法来获取显然是公共API一部分的test_unit_id -您可以直接访问p_id成员,但是在将来的boost版本中总会改变。您还可以使用test_observer子类中的assertion_resultexception_caughttest_unit_abortedtest_unit_timed_out钩子来手动跟踪每个测试是否通过或失败(assertion_result表示每当其参数为false时,当前测试就会失败,并且如果其他钩子都被调用,则其他所有钩都表示失败。

答案 1 :(得分:-1)

根据Boost.Test documentation,使用--log_level=error运行您的测试可执行文件。这将只捕获失败的测试用例。

我检查过它在一个正常运行的项目中使用BOOST_CHECK(false)工作,只有几千个单元测试。

使用--log_level=all运行会得到所有断言的结果。我通过将它管道到wc -l来检查,日志中的行数与测试中断言的数量完全相同(这个数字也由--report_level=detailed报告)。您当然也可以grep字符串errorfailed的日志。