【问题标题】:How to initialize google test without main?如何在没有 main 的情况下初始化谷歌测试?
【发布时间】:2016-01-12 12:23:02
【问题描述】:

我在exe中有这样的代码

int main(int argc, char** argv){ 
if(argc>1)
{
//do something
}
else
{
StartGoogleTest(argc ,argv);
}
}

StartGoogleTest 在共享库中。我必须传递命令行参数来启动或初始化谷歌测试框架。 以下是StartGoodleTest.cpp

TEST(SomeClass, myTest)
{
  //some code 
}
StartGoodleTest(int &argc, char** &argv)
{
  testing::InitGoogleTest(&argc, argv);

  return RUN_ALL_TESTS();
}

此代码在InitGoogleTest 崩溃。有没有什么方法可以在没有命令行参数的情况下初始化 google 测试,或者有任何其他方法可以在没有 main 的情况下初始化 google 测试?

【问题讨论】:

  • 问题(崩溃)显然在未显示的代码中。
  • 好的,但是有什么方法可以在没有 main 且不发送命令行参数的情况下启动 google 测试
  • 问题是你调用 StartGoogleTest 并且有一个名为 StartGoodleTest 的函数吗?
  • 你能提供一个堆栈跟踪吗?
  • @LawfulEvil 问题在 StartGoogleTest 问题在 testing::InitGoogleTest(&argc, argv);

标签: c++ dll shared-libraries googletest


【解决方案1】:

你的StartGoogleTest函数有问题,改成这样:

int StartGoogleTest(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);

    return RUN_ALL_TESTS();
}

就没有 main 的初始化而言,答案是否定的。您可以将函数 StartGoogleTest 放在共享库中,但在某些时候,您必须创建一个带有 main 函数的可执行文件,该函数必须与该库链接并调用 StartGoogleTest(在 main 中或在某些 sub-例程)来初始化 googletest 并运行测试用例。

【讨论】:

  • 我们可以在没有命令行参数的情况下启动测试,我们可以只保留 argc 和 argv 本地并在本地初始化 argv 和 argc 它工作正常
  • @ganesh 是的,您可以消除 main 接收的真实命令行参数的传递,并改用 local 。但是,我不建议您这样做,因为您失去了很多灵活性(例如,您不能为测试指定过滤器)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2021-06-09
  • 1970-01-01
相关资源
最近更新 更多