首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Eclipse中使用google测试管理测试输出?

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

Stack Overflow用户
提问于 2017-09-21 09:58:13
回答 1查看 1.2K关注 0票数 1

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

Test.cpp:

代码语言:javascript
复制
#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

代码语言:javascript
复制
#include "gtest/gtest.h"

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

在构建和运行合适的运行配置(对于"C/C++ Unit“和"Google测试运行器”)之后,"C/C++ Unit“选项卡在顶部显示一条错误消息:”解析Google测试模块输出时的Unkown error :意外测试模块输出“。

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-11 11:37:02

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

代码语言:javascript
复制
std::cout << "someoutput\n";

效果很好。

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

代码语言:javascript
复制
std::cout << "someoutput1";
...
std::cout << "someoutput2\n";

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

无论如何,就我和其他一些人而言,这些限制是可以接受的。

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

https://stackoverflow.com/questions/46340935

复制
相关文章

相似问题

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