【问题标题】:C++ / Visual Studio - How to output to Test Output Window?C++ / Visual Studio - 如何输出到测试输出窗口?
【发布时间】:2018-07-24 05:43:54
【问题描述】:

我知道 Visual Studio 中的记录器,即:

Logger::WriteMessage("foo");

这对于测试代码非常有用,但对于应用程序内部的代码不太实用。所以,我正在寻找一个标准的解决方案来重定向代码中的标准输出消息。

【问题讨论】:

  • 你所说的“屏幕”是什么意思?我的意思是标准输出消息通常出现在控制台窗口中,这与屏幕有什么不同?
  • 我正在查看 Visual Studio 中的“输出”+“测试”窗口。
  • 您可以使用 Windows 的OutputDebugString function 将输出发送到调试器(如果有)。要重定向std::cout,您可以替换其输出缓冲区。
  • 但是我仍然需要通过调用“OutputDebugStringW”来替换所有“cout”......对吗?
  • @KlingonJoe:不,你替换 cout 中的 streambuf,一次。

标签: c++ visual-studio unit-testing mstest


【解决方案1】:

std-out 中的流可以重新分配,例如:

// REDIRECT STD STREAM
streambuf * backup;
backup = cout.rdbuf();
stringstream ss;
cout.rdbuf(ss.rdbuf());    

// DO SOMETHING
cout << "foo\n";

// PRINT STREAM TO LOGGER
Logger::WriteMessage(ss.str().c_str());

// ASSIGN COUT BACK TO STDOUT
cout.rdbuf(backup);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多