首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >{fmt}等价于cout.rdbuf?

{fmt}等价于cout.rdbuf?
EN

Stack Overflow用户
提问于 2019-12-08 02:00:43
回答 1查看 151关注 0票数 1

我有一个单元测试,它通过读取函数发送的缓冲区来验证一个函数:

代码语言:javascript
复制
template <typename Manifold>
void print_manifold(Manifold const& manifold)
try
{
  std::cout << "Manifold has " << manifold.N0() << " vertices and "
            << manifold.N1() << " edges and " << manifold.N2() << " faces and "
            << manifold.N3() << " simplices.\n";
  // fmt::print(
  //    "Manifold has {} vertices and {} edges and {} faces and {}
  //    simplices.\n", manifold.N0(), manifold.N1(), manifold.N2(),
  //    manifold.N3());
}
catch (...)
{
  std::cerr << "print_manifold() went wrong ...\n";
  throw;
}  // print_manifold

和:

代码语言:javascript
复制
SCENARIO("Printing results", "[utility]")
{
  // redirect std::cout
  stringstream buffer;
  cout.rdbuf(buffer.rdbuf());
  GIVEN("A Manifold3")
  {
    Manifold3 const manifold(640, 4);
    WHEN("We want to print statistics on a manifold.")
    {
      THEN("Statistics are successfully printed.")
      {
        print_manifold(manifold);
        CHECK_THAT(buffer.str(), Catch::Contains("Manifold has"));
      }
    }
}

是否有一种方法可以捕获fmt::print生成的输出到stdout

当我注释掉cout代码并取消对fmt代码的注释时,我将得到由以前的cout <<实例生成的缓冲区。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-08 15:26:12

这更像是一个question问题,而不是{fmt}问题,但是您可以将stdout重定向到管道,并从它读取输出,如Redirecting stdout to pipe in C的答案中所描述的那样。虽然这不是一个很好的单元测试,因为它依赖于全局状态,但是当前的测试也有同样的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59231840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档