首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++谷歌测试在哪里放置测试夹具构造器定义

C++谷歌测试在哪里放置测试夹具构造器定义
EN

Stack Overflow用户
提问于 2017-01-10 01:03:11
回答 1查看 1.8K关注 0票数 1

最近,我正在使用Google作为我的C++代码。当我阅读如何为测试设置测试夹具时,我有点困惑。编写main()函数会话展示了一个关于测试夹具类的示例。但是,当涉及构造函数定义时,我们是否应该将其放在测试夹具类中呢?例如,类似于google提供的以下代码片段:

代码语言:javascript
复制
class FooTest : public ::testing::Test {
 protected:
  // You can remove any or all of the following functions if its body
  // is empty.

  FooTest() {
    // You can do set-up work for each test here.
  }

  virtual ~FooTest() {
    // You can do clean-up work that doesn't throw exceptions here.
  }
}

我还查看了宏TEST_F(test_fixture_name, test_name)的定义,似乎对于每个与相同测试夹具相关联的测试,宏将创建测试夹具类的一个新子类。

鉴于上述事实,

  1. 如果构造函数的工作量很大,这是否意味着测试夹具的构造函数的隐式inline将允许编译器将构造函数的大量代码扩展到任何地方?(或者这在同一个翻译单位不重要?)
  2. 在这种情况下,在测试夹具类之外定义构造函数更有意义吗?但是这会降低测试代码的可读性,我真的不知道该怎么做。

有人能给我一些建议吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-01-10 01:36:32

关于问题1,这完全取决于编译器--它有很大的自由度来决定是否和如何内联您的函数。即使您显式地将一个函数声明为inline,对于编译器来说,它仍然只是一个建议,如果它决定产生的机器代码太臃肿或效率太低,也可以忽略这个建议。

C++常见问题有关于这个主题的更多细节:

有几种方法可以指定函数是内联的,其中有些涉及内联关键字,而另一些则没有。无论如何将函数指定为内联函数,编译器都可以忽略它的请求:编译器可能会内联--扩展一些、全部或不包含调用指定为内联的函数的位置。(不要气馁上面的灵活性实际上是一个巨大的优势:它允许编译器对大型函数和小函数的处理方式不同,此外,如果选择正确的编译器选项,编译器可以生成易于调试的代码。)

关于问题2,我建议只使用您认为最易读的内容。当我使用Google时,我亲自将所有“共享”代码放在测试夹具定义中,然后立即对在该夹具中运行的所有单元测试进行TEST_F声明。

代码语言:javascript
复制
class MyTestCase : public ::testing::Test
{
    virtual void SetUp() override
    {
        // ...
    }
}

TEST_F(MyTestCase, UnitTestNumber1)
{
    // testing stuff here
}

// ...more tests...

不过,这只是个建议。选择一个对你有用的标准,并始终如一地使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41559602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档