我怎样才能继承gtest testing :: Test?

时间:2016-03-10 09:43:26

标签: c++ unit-testing googletest

我有一些具有一些常用功能的测试类,我想创建像

这样的东西
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();
}

1 个答案:

答案 0 :(得分:3)

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

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

https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#getting-the-current-tests-name