我正在用Eclipse开发C++代码。对于单元测试,我使用google,通过"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++ Unit“和"Google测试运行器”)之后,"C/C++ Unit“选项卡在顶部显示一条错误消息:”解析Google测试模块输出时的Unkown error :意外测试模块输出“。
当我作为应用程序在Eclipse中运行测试时,它会通过,控制台将显示正确的输出。测试也通过插件,只要它们不生成任何输出(例如,将Test.cpp中的字符串更改为空字符串std::string s = "";)。
是否有任何解决办法允许执行通过插件生成输出的测试?我知道,例如,我可以将输出写到一个ostream中,并在测试期间将其设置为ofstream。但是,我倾向于在不更改源代码的情况下进行测试。有什么想法吗?
我不太习惯用C++编程,所以非常感谢你的建议。
P.S.:我正在使用Eclipse氧气(4.7.0)。
发布于 2017-10-11 11:37:02
显然,如果测试生成控制台输出,只要输出字符串以换行符结尾,就不会有问题。例如,
std::cout << "someoutput\n";效果很好。
当有多个输出时,任何测试用例的最后输出以换行符结尾似乎就足够了:
std::cout << "someoutput1";
...
std::cout << "someoutput2\n";请注意(至少到目前为止),即使测试在两个输出之间失败,这也是可行的。这是因为在测试失败的情况下,gtest会产生一些额外的输出,而扩展显然只需要匹配其中的部分。当然,这可能会停止对gtest或单元测试扩展的任何更新。
无论如何,就我和其他一些人而言,这些限制是可以接受的。
https://stackoverflow.com/questions/46340935
复制相似问题