【问题标题】:Google test - before class谷歌测试 - 课前
【发布时间】:2016-03-07 14:03:49
【问题描述】:

我正在运行谷歌测试。

我需要课前之类的东西。我有 SetUp() 和 TearDown() 函数,但它们在 each 测试之前和之后运行。现在我需要一些全局的东西——比如ctor,它应该只在类加载时运行一次。

【问题讨论】:

  • 请详细说明一下这个“类加载的时候”。你指的是什么类,类“加载”是什么意思?
  • 我的意思是在所有测试开始之前运行的东西。不是为每个测试用例设置。

标签: c++ unit-testing googletest


【解决方案1】:

您可以在每个夹具类中定义静态成员函数 void SetUpTestCase() 和 void TearDownTestCase(),即在派生自 ::testing::Test 的每个类中。

对于每个夹具,该代码仅在运行夹具中的所有测试之前和之后运行一次。

检查docs。

【讨论】:

  • Perez - 我怎样才能为所有测试(在所有测试用例中)做到这一点?我的意思是我希望在每次测试之前运行相同的 SetUp 方法以及在每次测试之后运行相同的 TearDown 方法,而不添加/编辑任何现有的类?
  • @GuyAvraham:AFAIK 框架中没有这样的钩子函数可以让你这样做。您需要自己构建它,可能为::testing::Test 定义一个子类,然后让您的测试类派生自它。
  • 请注意,在较新版本的 gtest 中,您可能需要改用 SetUpTestSuite() 和 TearDownTestSuite() 方法。
  • 如果要全局第一次初始化,可以使用静态互斥体和静态布尔值进行唯一的第一次初始化。但不确定上次全球拆解。
【解决方案2】:

从类::testing::Environment 继承并覆盖方法SetUp 和TearDown,这些方法将包含用于您的全局设置和拆卸的代码。然后,在运行测试的可执行文件的主函数中,在调用RUN_ALL_TESTS() 之前调用函数::testing::AddGlobalTestEnvironment()。有关更多信息,请查看文档:

https://github.com/google/googletest/blob/master/docs/advanced.md#global-set-up-and-tear-down

【讨论】:

猜你喜欢
  • 2022-07-27
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 2012-08-17
  • 2014-04-04
  • 2011-04-02
  • 1970-01-01
相关资源
最近更新 更多