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

时间:2017-09-21 09:58:14

标签: c++ eclipse unit-testing eclipse-plugin eclipse-cdt

我正在使用Eclipse CDT开发C ++代码。对于单元测试,我使用谷歌测试,我通过“C ++单元测试”插件集成到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());
}

AllTest.cpp

#include "gtest/gtest.h"

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

在构建并运行合适的运行配置(“C / C ++单元”与“Google Tests Runner”)后,“C / C ++单元”选项卡顶部显示错误消息:“解析Google Test期间出现未知错误模块输出:意外的测试模块输出。“

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

工作正常。

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

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

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

无论如何,为了我的目的,可能还有其他人的这些限制是可以接受的。