我如何子类化gtest测试::测试?

问题描述 投票:0回答:1

我有一些具有一些常见功能的测试类,我想创建类似的东西

class BaseTest : public testing::Test

然后派生进一步的子类,例如

class StuffTest : public BaseTest

但是编译器给出了错误信息

error: use of deleted function 'StuffTest::StuffTest()'
TEST_F(StuffTest, SFile)

如何派生测试子类,为什么会出现这个奇怪的错误消息?

添加了一些测试代码: (我想在子类中添加一个测试名称。没有构造函数,它可以正常工作。使用构造函数我遇到奇怪的语法错误。)

#include <gtest/gtest.h>

using namespace std;

// A new test class  of these is created for each test
class BaseTest
  : public testing::Test
{
public:
 // BaseTest(string a);
BaseTest();
   virtual void SetUp()
   { cerr << "Setting up " << MyName;}
   virtual void TearDown()
   {cerr << "Closing down " << MyName;}
protected:
  string MyName;
};


//BaseTest::BaseTest(string TestName)
BaseTest::BaseTest()
: testing::Test
{
//  MyName = TestName;
}

TEST_F(BaseTest, Tools)
{
  cerr << "Something was wrong\n";
}


// A new test class  of these is created for each test
class MyStuffTest : BaseTest
{
public:
};
/*
TEST_F(MyStuffTest, Tools)
{
  cerr << "Something was wrong\n";
}
*/


int main(int argc, char **argv) {
  testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
}
c++ unit-testing googletest
1个回答
3
投票

我不确定你打算在哪里调用构造函数 首先是

std::string
参数,googletest 夹具的使用 类并不意味着显式创建夹具类对象。 问题是您正在尝试创建一个固定装置类 没有默认构造函数(它不是由编译器生成的 因为你用
std::string
参数声明了一个)。这是 一个问题,因为 googletest 为声明的每个测试创建一个新类 与
TEST_F(MyFixtureClass, ...)
,这个新类继承自
MyFixtureClass
并且需要默认构造函数。

要获取测试的名称,请使用

testing::TestInfo
对象,可以使用方法
testing::UnitTest::current_test_info
检索该对象。有关更详细的使用示例,请查看文档

© www.soinside.com 2019 - 2024. All rights reserved.