gpt4 book ai didi

c++ - 测试夹具中的设置与构造函数

转载 作者:IT老高 更新时间:2023-10-28 12:45:34 25 4
gpt4 key购买 nike

为什么测试夹具在 Google Test 中有一个 SetUp 方法?构造函数实际上不是同一件事吗?对于 TearDown 方法也是如此。对 SetUp 和 Constructor 以及 TearDown 和 Destructor 的调用与 TestEventListener 一致:OnTestStart 和 OnTestEnd。

最佳答案

an answer to that in the FAQ :

Should I use the constructor/destructor of the test fixture or the set-up/tear-down function?

The first thing to remember is that googletest does not reuse the same testfixture object across multiple tests. For each TEST_F, googletest will createa fresh test fixture object, immediately call SetUp(), run the test body,call TearDown(), and then delete the test fixture object.

When you need to write per-test set-up and tear-down logic, you have the choicebetween using the test fixture constructor/destructor or SetUp()/TearDown().The former is usually preferred, as it has the following benefits:

  • By initializing a member variable in the constructor, we have the option tomake it const, which helps prevent accidental changes to its value andmakes the tests more obviously correct.
  • In case we need to subclass the test fixture class, the subclass'constructor is guaranteed to call the base class' constructor first, andthe subclass' destructor is guaranteed to call the base class' destructorafterward. With SetUp()/TearDown(), a subclass may make the mistake offorgetting to call the base class' SetUp()/TearDown() or call them at thewrong time.

You may still want to use SetUp()/TearDown() in the following rare cases:

  • 在构造函数(或析构函数)的主体中,不能使用ASSERT_xx 宏。因此,如果设置操作可能导致致命应该阻止测试运行的测试失败,有必要使用 CHECK 宏或使用 SetUp() 代替构造函数。
  • 如果拆卸操作可能引发异常,则必须使用TearDown() 与析构函数相反,因为抛出析构函数会导致未定义的行为,通常会立即杀死您的程序。笔记当异常发生时,许多标准库(如 STL)可能会抛出在编译器中启用。因此,如果您喜欢 TearDown()想要编写可移植的测试,不管有没有异常都可以工作。
  • googletest 团队正在考虑启用断言宏启用异常的平台(例如 Windows、Mac OS 和 Linux客户端),这将消除用户传播的需要从子例程到其调用者的失败。因此,您不应该使用如果您的代码可以在这样的平台。
  • 在构造函数或析构函数中,不能调用虚函数这个对象。 (您可以调用声明为虚拟的方法,但它会是静态绑定(bind)。)因此,如果您需要调用将被在派生类中重写,您必须使用 SetUp()/TearDown()

关于c++ - 测试夹具中的设置与构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com