C++ / GoogleTest - 如何在链接目录中为每个测试运行安装程序
C++ / GoogleTest - How to run Setup for each test in a link directory
我试图在每个单独的测试开始时捕获标准输出,如果测试失败,则只打印标准输出。我需要它为每个 TEST 运行并在目录中TEST_F,所以我正在寻找是否可以在可能的情况下将全局测试夹具应用于主设备。
我可以应用全局环境,但这在设置和拆卸测试运行程序时运行。我可以通过将代码添加到我的许多标准测试夹具中的每一个来使其工作,但我希望有一个全局解决方案,而不是更改每个夹具。
struct dummyFixture : public ::testing::Test
{
// --- Need to apply this globally ---
void SetUp()
{
backup = std::cout.rdbuf();
std::cout.rdbuf(testingSink.rdbuf());
}
void TearDown()
{
std::cout.rdbuf(backup);
if (::testing::Test::HasFailure())
std::cout << testingSink.str() << std::endl;
testingSink.str(std::string());
}
private:
std::stringstream testingSink;
std::streambuf *backup;
};
TEST(dummyTest, test_pass)
{
// should not print log to console
std::cout << "DUMMY TEST" << std::endl;
EXPECT_TRUE(true);
}
TEST_F(dummyFixture, test_fail)
{
// should print log to console
std::cout << "DUMMY TEST FIXTURE" << std::endl;
EXPECT_TRUE(false);
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
由于您不想修改任何文本夹具,并且希望像测试夹具的 SetUp(( 和 TearDown(( 一样运行它,因此您可以尝试使用以下方法。
class Logger
{
Logger()
{
backup = std::cout.rdbuf();
std::cout.rdbuf(testingSink.rdbuf());
}
~Logger()
{
std::cout.rdbuf(backup);
if (::testing::Test::HasFailure())
std::cout << testingSink.str() << std::endl;
testingSink.str(std::string());
}
private:
std::stringstream testingSink;
std::streambuf *backup;
};
您现在可以从此 Logger 类派生所有测试类(派生自
::test::test(。struct dummyFixture : public ::testing::Test, **public Logger**
{
};
GTest也有方法CaptureStdout((和GetCapturedStdout((来获取捕获的stdout字符串,你也可以使用它们。
这将确保您以最少的代码更改实现您尝试执行的操作。
相关文章:
- 运行程序时出现问题
- 分段错误当我试图运行程序时出错
- C++ 每次运行程序时我都会"nan"输出的问题
- 通过 g++ 运行程序时没有这样的文件或目录
- 员工测试驱动程序数据结构
- 重新运行程序和字符串流?
- 无法在 VS Code 上使用代码运行程序运行C++文件
- 使用有限的 RAM 运行 c++ 程序
- C++低吞吐量 winsock TCP 测试应用程序
- 继续运行程序而无需任何干预,直到要求退出为止
- 如何在测试运行期间获取资源的目录路径
- 如何在每次运行程序时写入文件的下一行?
- 控制台在运行C ++程序后立即关闭(无需调试)
- 使用 ' ios::sync_with_stdio(0)' 测试运行时的差异时,为什么我的输出是碎片化的?
- 运行程序时找不到共享对象库,但在编译过程中链接了它
- 远程运行程序
- 在 Heroku 上运行 C++ 程序
- C++ / GoogleTest - 如何在链接目录中为每个测试运行安装程序
- 如何在TFS生成期间显式排除测试运行程序中的程序集
- 使用python运行c++程序并对其进行测试