我怎样才能子类测试::测试

How can I subclass gtest testing::Test?

本文关键字:测试 子类      更新时间:2023-10-16

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

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 wrongn";
}

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

int main(int argc, char **argv) {
  testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
}

我不确定您打算在哪里调用构造函数 首先std::string争论,谷歌测试夹具的使用类并不意味着显式创建夹具类对象。问题是您正在尝试创建一个夹具类没有默认构造函数(它不是由编译器生成的因为你用std::string参数声明了一个)。这是一个问题,因为 GoogleTest 为每个声明的测试创建一个新类在TEST_F(MyFixtureClass, ...),这个新类继承自 MyFixtureClass并需要默认构造函数。

若要获取测试的名称,请使用可以使用方法 testing::UnitTest::current_test_info 检索testing::TestInfo对象。有关更详细的使用示例,请查看文档。