我希望为我的 Google 测试装置定义一个不可实例化的父类(super class)。 父类(super class)将初始化成员并进行一些默认测试。 子类将扩展父类(super class),并有特定的测试。
下面是基类:
class BaseTest : public ::testing::Test
{
protected:
BaseTest(...) {} // constructor with args to setup members
void SetUp() {} // sets up the internals
};
TEST_F(BaseTest, ACommonTest) {} // common test case
派生类:
class DerivedTest : public BaseTest
public:
DerivedTest() : BaseTest(...) {} // default no args constructor
void SetUp() { BaseTest::SetUp(); }
};
TEST_F(DerivedTest, ASpecificTest) {} // specific test case
我想要的是不实例化 BaseTest 的测试,而是实例化 DerivedTest 并调用 ACommonTest 和 ASpecificTest 两种方法。
此时它实际做的是实例化 BaseTest 并运行 ACommonTest 就可以了。然后实例化 DerivedTest 并运行 ASpecificTest。
最佳答案
您可以在这里使用“Typed Tests”或“Type-Parameterized Tests”。
例如,如果您删除 TEST_F(BaseTest, ACommonTest) {}
(因为这是您实例化 BaseTest
而不是派生自它的地方),您可以将其替换为:
template <typename T>
class DerivedCommonTest : public BaseTest {
public:
DerivedCommonTest() : BaseTest() {}
virtual void SetUp() { BaseTest::SetUp(); }
};
typedef ::testing::Types<Foo, Bar> MyTypes;
TYPED_TEST_CASE(DerivedCommonTest, MyTypes);
TYPED_TEST(DerivedCommonTest, ACommonTest) {} // common test case
如果你真的想让 BaseTest
不可实例化,你可以向它添加一个纯虚函数,然后为每个派生类型实现它:
class BaseTest : public ::testing::Test {
protected:
BaseTest() {} // constructor with args to setup members
virtual void SetUp() {} // sets up the internals
virtual void PureVirtual() = 0;
};
...
template <typename T>
class DerivedCommonTest : public BaseTest {
public:
DerivedCommonTest() : BaseTest() {}
virtual void SetUp() { BaseTest::SetUp(); }
virtual void PureVirtual() {}
};
...
class DerivedTest : public BaseTest {
public:
DerivedTest() : BaseTest(...) {} // default no args constructor
virtual void SetUp() { BaseTest::SetUp(); }
virtual void PureVirtual() {}
};
关于c++ - 不可实例化的谷歌测试夹具父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775188/