C++ 我是否可以仅获取boost单元测试失败的日志输出

C++ 我是否可以仅获取boost单元测试失败的日志输出,c++,unit-testing,boost,boost-test,boost-unit-test-framework,C++,Unit Testing,Boost,Boost Test,Boost Unit Test Framework,我在我的应用程序中有一些日志记录(它恰好是log4cxx,但我在这方面很灵活),并且我有一些使用boost单元测试框架的单元测试。当我的单元测试运行时,我从通过和失败的测试中获得了大量日志输出(不仅记录了boost断言,还记录了我自己的应用程序代码的调试日志)。我想让单元测试框架在通过测试的过程中丢弃日志,并输出失败测试的日志(在使用python/nose时,我逐渐意识到这种行为) 对于boost单元测试框架,是否有一些标准的方法可以做到这一点?如果没有,是否存在一些测试开始/测试结束挂钩,我可

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

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

根据,使用
--log\u level=error
运行测试可执行文件。这将只捕获失败的测试用例

我使用
BOOST\u检查(false)
检查了它在一个正常运行的项目上的工作情况,该项目有几千个单元测试


运行
--log\u level=all
将给出所有断言的结果。我通过管道将其连接到
wc-l
来检查日志中的行数是否与测试中的断言数完全相同(该数字也由
--report\u level=detailed
报告)。当然,您也可以
grep
字符串的日志
error
failed

有测试开始和测试结束挂钩,您可以用于此目的。要设置这些钩子,您需要定义的子类,创建将在整个测试过程中保持的类的实例(静态全局对象或类),然后将该类传递给


使用测试挂钩开始进行覆盖的方法是
test\u unit\u start
,使用测试挂钩结束进行覆盖的方法是
test\u unit\u finish
。但是,这些钩子同时针对测试套件和单个测试用例启动,这可能是一个问题,具体取决于钩子的设置方式。
test\u unit\u finish
hook也没有明确告诉您给定的测试是否真的通过了,而且似乎没有一种清晰而明显的方法来获取该信息。有一个单例,它有一个方法,如果您将提供给
test\u unit\u finish
的测试单元的
test\u unit\u id
传递给它,您将得到一个具有方法的对象。我真的找不到一种方法来获取
test\u unit\u id
,它显然是公共API的一部分——您可以直接访问p\u id成员,但在未来的boost版本中,这可能会发生变化。您还可以使用test\u observer子类中的
断言\u结果
异常捕获
测试单元(test\u unit)中止
,以及
测试单元(test\u timed)超时
钩子,手动跟踪每个测试是通过还是失败(
assertion\u result
在当前测试的参数为false时表示失败,如果调用它,则每隔一个钩子表示失败)。

它控制boost本身的日志,但不帮助我控制应用程序的调试日志itself@kdt那我就不太明白了:你对我是什么意思“我从测试中得到了很多日志输出”?你在程序的什么地方捕获它们?你可以在“失败”或“错误”上使用
std::regex
我的代码做各种各样的调试日志记录。我想做的是把它们都缓冲起来,然后如果测试失败,输出它,如果通过,扔掉它。当我说“测试”时,我不仅仅是指boost断言等,我指的是我运行测试时运行的所有代码。如果答案是肯定的,那没关系“不,boost unit tests没有为“@kdt”提供钩子。我无法轻松测试它,但您确实尝试了我对运行时参数的建议吗?“活动日志级别作为阈值而不是选择器工作。对于给定的活动日志级别阈值,所有测试日志项都具有“重要性”启用高于阈值的测试日志项,禁用“重要性”低于阈值的所有测试日志项。"因此,当使用
--log_level=error
运行时,除了错误之外,您不应该看到任何东西。它们甚至不会被生成。@kdt我仍然有兴趣让它工作,您能给我一个代码示例来说明您捕捉错误的确切位置吗?Boost.Test不会截获任何日志流,例如
std::cout
std::cerr