我刚刚遇到了在多个线程的输出不是原子的 Windows 上运行的boost 单元的问题,因此如果我将任何测试或消息放在主线程以外的任何线程中,它会破坏输出 XML,这会混淆 CI 系统。
我看不到任何增强单元选项来控制它,所以我想知道这是否是谷歌测试可以做的事情,这是否值得切换到谷歌测试(搜索维基没有找到我任何东西)。
还是我应该使用其他一些方法(在 linux 上从命令行运行测试以查看此输出时很有用。但我不希望它破坏我的 windows CI)?
GTest 的输出是互斥保护的,所以多线程不会产生乱码输出。
通常做这项工作的功能是AddTestPartResult
. 在第 3713 行,您可以看到正在应用的锁:
internal::MutexLock lock(&mutex_);
然后在 3732 处将结果打印在此调用中:
impl_->GetTestPartResultReporterForCurrentThread()->ReportTestPartResult(result);