C++;Google测试将测试夹具构造函数定义放在何处 我最近使用谷歌测试作为我的C++代码。当我阅读如何为测试设置测试夹具时,我有点困惑。该课程展示了一个关于测试夹具类的示例。然而,当涉及到构造函数定义时,我们是否应该将其放在testfixture类中?例如,如google test doc给出的以下代码片段: 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. } }
我还研究了宏C++;Google测试将测试夹具构造函数定义放在何处 我最近使用谷歌测试作为我的C++代码。当我阅读如何为测试设置测试夹具时,我有点困惑。该课程展示了一个关于测试夹具类的示例。然而,当涉及到构造函数定义时,我们是否应该将其放在testfixture类中?例如,如google test doc给出的以下代码片段: 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. } },c++,unit-testing,constructor,inline,googletest,C++,Unit Testing,Constructor,Inline,Googletest,我还研究了宏TEST\F(TEST\u fixture\u name,TEST\u name)的定义,似乎对于与同一测试夹具关联的每个测试,宏都将创建测试夹具类的新子类 鉴于上述事实, 如果构造函数的工作量很大,这是否意味着测试夹具构造函数的隐式inline将允许编译器在任何地方扩展构造函数的大块代码?(或者这在同一个翻译单元中并不重要?) 在这种情况下,在测试夹具类之外定义构造函数更有意义吗?但是这会降低测试代码的可读性,我真的不知道该怎么做 有谁能给我一些建议吗?谢谢 关于问题1,这完全取决
TEST\F(TEST\u fixture\u name,TEST\u name)
的定义,似乎对于与同一测试夹具关联的每个测试,宏都将创建测试夹具类的新子类
鉴于上述事实,
inline
将允许编译器在任何地方扩展构造函数的大块代码?(或者这在同一个翻译单元中并不重要?)有谁能给我一些建议吗?谢谢 关于问题1,这完全取决于编译器-它有很大的自由度来决定是否以及如何内联函数。即使您显式地将函数声明为
inline
,对于编译器来说,这仍然只是一个建议,如果它决定生成的机器代码过于臃肿或效率低下,则可以忽略该建议
有关此主题的详细信息,请参见:
有几种方法可以指定函数是内联的,其中一些方法涉及内联关键字,另一些方法不涉及内联关键字。无论您如何将函数指定为内联函数,编译器都可以忽略这一请求:编译器可能会内联扩展您调用指定为内联函数的部分、全部或任何位置。(如果这看起来非常模糊,请不要气馁。上述方法的灵活性实际上是一个巨大的优势:它让编译器以不同于小函数的方式处理大函数,另外,如果选择正确的编译器选项,编译器还可以生成易于调试的代码。)
关于问题2,我建议你选择你认为可读性最好的。当我使用Google测试时,我个人会将所有“共享”代码放在测试夹具定义中,然后立即为在该夹具中运行的所有单元测试声明test_F
class MyTestCase : public ::testing::Test
{
virtual void SetUp() override
{
// ...
}
}
TEST_F(MyTestCase, UnitTestNumber1)
{
// testing stuff here
}
// ...more tests...
不过,这只是一个建议。选择一个适合你的标准,并始终如一地使用它