我如何继承 gtest testing::Test?
How can I subclass gtest testing::Test?
我已经测试了 类 一些常见的功能,我想创建类似
的东西
class BaseTest : public testing::Test
然后进一步推导出子类,比如
class StuffTest : public BaseTest
但是编译器报错
error: use of deleted function 'StuffTest::StuffTest()'
TEST_F(StuffTest, SFile)
如何派生测试子类,为什么会出现这个奇怪的错误消息?
添加了一些测试代码:
(我想在 sub类 中添加一个测试名称。没有构造函数,它工作正常。使用构造函数我遇到奇怪的语法错误。)
#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();
}
我不确定你打算在哪里调用构造函数
std::string
参数排在首位,googletest fixture 的使用
classes 并不意味着显式创建 fixture class 对象。
问题是您正在尝试创建夹具 class
没有默认构造函数(它不是由编译器生成的
因为你用 std::string
参数声明了一个)。这是
一个问题,因为 googletest 为每个声明的测试创建了一个新的 class
对于 TEST_F(MyFixtureClass, ...)
,这个新的 class 继承自
MyFixtureClass
并且需要默认构造函数。
要获取测试名称,请使用 testing::TestInfo
对象,该对象可以使用方法 testing::UnitTest::current_test_info
检索。有关更详细的用法示例,请查看文档:
我已经测试了 类 一些常见的功能,我想创建类似
的东西class BaseTest : public testing::Test
然后进一步推导出子类,比如
class StuffTest : public BaseTest
但是编译器报错
error: use of deleted function 'StuffTest::StuffTest()'
TEST_F(StuffTest, SFile)
如何派生测试子类,为什么会出现这个奇怪的错误消息?
添加了一些测试代码: (我想在 sub类 中添加一个测试名称。没有构造函数,它工作正常。使用构造函数我遇到奇怪的语法错误。)
#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();
}
我不确定你打算在哪里调用构造函数
std::string
参数排在首位,googletest fixture 的使用
classes 并不意味着显式创建 fixture class 对象。
问题是您正在尝试创建夹具 class
没有默认构造函数(它不是由编译器生成的
因为你用 std::string
参数声明了一个)。这是
一个问题,因为 googletest 为每个声明的测试创建了一个新的 class
对于 TEST_F(MyFixtureClass, ...)
,这个新的 class 继承自
MyFixtureClass
并且需要默认构造函数。
要获取测试名称,请使用 testing::TestInfo
对象,该对象可以使用方法 testing::UnitTest::current_test_info
检索。有关更详细的用法示例,请查看文档: