【问题标题】:How to manage test output with google test in Eclipse CDT?如何在 Eclipse CDT 中使用 google test 管理测试输出?
【发布时间】:2018-03-02 15:06:16
【问题描述】:

我正在使用 Eclipse CDT 开发 C++ 代码。对于单元测试,我使用我通过“C++ 单元测试”插件集成到 Eclipse 中的谷歌测试。现在,当测试生成输出到标准输出时会出现问题,例如,如下例所示。

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();
}

在构建并运行合适的运行配置后(对于带有“Google Tests Runner”的“C/C++ 单元”),“C/C++ 单元”选项卡顶部会显示一条错误消息:“Unkown error during parsing Google Test模块输出:意外的测试模块输出。”

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

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

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

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

【问题讨论】:

  • 您从哪里获得“C++ 单元测试”插件?是this one吗?如果是这样,我建议contacting its developers,因为问题似乎与插件有关。
  • 其实这是个好问题。我是按照these instructions安装的。即,直接在 Eclipse 中通过“帮助”->“安装新软件”->“C/C++ 单元测试支持”。不幸的是,几乎没有关于该工具的更多信息,它看起来更像是某种官方的 Eclipse 扩展。我很确定它不是你链接的那个。据我所知,该插件专门用于将 CUTE 框架集成到 Eclipse 中,而不是任何其他测试框架。
  • 你是对的,看起来这个插件是 Eclipse CDT 本身的一部分。请问file a CDT bug report好吗?
  • 实际上,您可能遇到this bug,它已经在文件中。
  • 举报here

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


【解决方案1】:

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

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

工作正常。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2011-04-25
    • 2020-04-15
    相关资源
    最近更新 更多