gpt4 book ai didi

c++ - 不可实例化的谷歌测试夹具父类(super class)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:36 26 4
gpt4 key购买 nike

我希望为我的 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/

26 4 0
文章推荐: c++ - qt 样式 QPalette::windowText 颜色在应用程序启动后恢复
文章推荐: c++ - 如何在 MPI 中 sleep
文章推荐: c++ - 无法将字段 声明为抽象类型