如何在 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 或单元测试扩展的任何更新。
无论如何,出于我的目的以及可能其他一些人的目的,这些限制是可以接受的。
我正在使用 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 或单元测试扩展的任何更新。
无论如何,出于我的目的以及可能其他一些人的目的,这些限制是可以接受的。