C++谷歌测试在哪里放置测试夹具构造函数定义
C++ Google Test Where to Put Test Fixture Constructor Definition
我最近正在为我的C++代码使用Google Test。当我读到如何设置测试夹具时,我有点困惑。Writing The main()Function会话展示了一个关于测试fixture类的示例。然而,当涉及到构造函数定义时,我们应该把它放在测试夹具类中吗?例如,类似于谷歌测试文档给出的以下代码片段:
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)
的定义,似乎对于与同一测试夹具关联的每个测试,宏都会创建测试夹具类的新子类。
鉴于上述事实,
如果构造函数的工作量很大,这是否意味着测试夹具的构造函数的隐式
inline
将允许编译器到处扩展构造函数的大块代码?(或者这在同一个翻译单元中无关紧要?)在这种情况下,在测试夹具类之外定义构造函数更有意义吗?但这会降低测试代码的可读性,我真的不知道该怎么办。
有人能给我一些建议吗?谢谢
关于问题1,这完全取决于编译器——它有很大的自由度来决定是否以及如何内联函数。即使您明确地将函数声明为inline
,就编译器而言,这仍然只是一个建议,如果它认为生成的机器代码过于臃肿或效率低下,则可以忽略该建议。
C++常见问题解答提供了关于以下主题的更多详细信息:
有几种方法可以指定函数是内联的,其中一些方法涉及内联关键字,另一些方法则不涉及。无论您如何将函数指定为内联,编译器都可以忽略这一请求:编译器可能会内联扩展您调用指定为内联的函数的部分、全部或全部位置。(如果这看起来非常模糊,不要气馁。上述功能的灵活性实际上是一个巨大的优势:它可以让编译器区别对待大函数和小函数,此外,如果选择正确的编译器选项,它还可以让编译器生成易于调试的代码。)
关于问题2,我建议您选择最可读的内容。当我使用Google测试时,我亲自将所有"共享"代码放在测试夹具定义中,然后立即为在该夹具中运行的所有单元测试声明test_F。
class MyTestCase : public ::testing::Test
{
virtual void SetUp() override
{
// ...
}
}
TEST_F(MyTestCase, UnitTestNumber1)
{
// testing stuff here
}
// ...more tests...
不过,这只是一个建议。选择一个适合你的标准,并始终如一地使用它。
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 谷歌测试:如何为多个测试只运行一次夹具?
- 从谷歌测试中的派生夹具派生夹具
- GMock 测试夹具在 Windows 上崩溃
- 如何在Fitnesse测试中生成夹具的文档
- Boost单元测试夹具继承测试类,是否可以访问受保护的方法
- C++谷歌测试在哪里放置测试夹具构造函数定义
- 使用夹具时的升压单元测试过滤器
- 测试夹具中的设置与构造函数
- 不可实例化的谷歌测试夹具超级类
- 谷歌测试框架参数化夹具
- GoogleTest C++-测试夹具
- 我如何装饰谷歌测试夹具
- 无法引用测试夹具的默认构造函数
- 如何在谷歌测试中为一个夹具运行多个测试用例