如何在 Eclipse CDT 中使用 google 测试管理测试输出?

How to manage test output with google test in Eclipse CDT?

我正在使用 Eclipse 开发 C++ 代码 CDT。对于单元测试,我使用 google 测试,我通过 "C++ Unit Testing" 插件将其集成到 Eclipse 中。现在,当测试生成输出到 stdout 时会出现问题,例如,如下例所示。

Test.cpp:

#include <iostream>
#include <string>

#include "gtest/gtest.h"

TEST(TestSuite, TestCase) {
    std::string s = "str";
    std::cout << s;
    ASSERT_STREQ(s.c_str(), s.c_str());
}

全部Test.cpp

#include "gtest/gtest.h"

int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

构建并运行设置合适的 运行 配置后(对于 "C/C++ Unit" 和 "Google Tests Runner"),"C/C++ Unit" 选项卡会在顶部:"Unkown error during parsing Google Test module output: Unexpected test module output."

当我 运行 在 Eclipse 中作为应用程序进行测试时,它通过了并且控制台显示了正确的输出。只要插件不产生任何输出,测试也会通过插件(例如,将 Test.cpp 中的字符串更改为空字符串 std::string s = "";

是否有任何解决方法来允许执行通过插件生成输出的测试?我知道我可以,例如,将输出写入 ostream 并在测试期间将其设置为 ofstream。但是,我更愿意在不对源代码进行任何更改的情况下进行测试。有什么想法吗?

我不太习惯用 C++ 编程,所以非常感谢任何建议。

P.S.: 我正在使用 Eclipse Oxygen (4.7.0).

显然,如果测试产生控制台输出,只要输出字符串以换行符结尾,这不是问题。例如,

std::cout << "someoutput\n";

工作正常。

当有多个输出时,任何测试用例的最后一个输出以换行符结尾似乎就足够了:

std::cout << "someoutput1";
...
std::cout << "someoutput2\n";

请注意(至少到目前为止)即使在两个输出之间的测试失败了,这仍然有效。这是因为在测试失败的情况下,gtest 会产生一些额外的输出,而扩展显然只需要匹配其中的一部分。当然,这可能会停止对 gtest 或单元测试扩展的任何更新。

无论如何,出于我的目的以及可能其他一些人的目的,这些限制是可以接受的。