我正在尝试使用构造函数声明(带参数)从普通类创建一个测试夹具类,如下所示:
hello.h
class hello
{
public:
hello(const uint32_t argID, const uint8_t argCommand);
virtual ~hello();
void initialize();
};
其中uint32_t为:typedef unsigned int
而uint8_t为:typedef unsigned char
我的测试夹具类:
helloTestFixture.h
class helloTestFixture:public testing::Test
{
public:
helloTestFixture(/*How to carry out the constructor declaration in this test fixture class corresponding to the above class?*/);
virtual ~helloTestFixture();
hello m_object;
};
TEST_F(helloTestFixture, InitializeCheck) // Test to access the 'intialize' function
{
m_object.initialize();
}
尝试实现上述代码后,它给出了错误:
Error C2512: no appropriate default constructor available
我试图将 hello.h 文件中构造的构造函数复制到我的 hellotestfixture.h 文件中。这样做的任何方式? 我尝试过很多方面但是还没有成功。关于如何实现这个的任何建议?
答案 0 :(得分:3)
此错误告诉您,您没有在helloTestFixture
类中提供默认构造函数,TEST_F
宏需要该类来创建类的对象。
您应该使用部分关系而不是是-a 。创建所需类hello
的所有对象,以便测试您需要的所有各个方面。
我不是Google Test的专家。但是,请在此处浏览文档:
似乎首选SetUp
方法。如果您的目标是测试班级hello
,您可以这样写:
#include <memory>
#include "hello.h"
#include "gtest.h"
class TestHello: public testing::Test {
public:
virtual void SetUp()
{
obj1.reset( new hello( /* your args here */ ) );
obj2.reset( new hello( /* your args here */ ) );
}
std::auto_ptr<hello> obj1;
std::auto_ptr<hello> obj2;
};
TEST_F(QueueTest, MyTestsOverHello) {
EXPECT_EQ( 0, obj1->... );
ASSERT_TRUE( obj2->... != NULL);
}
auto_ptr
并不是真的需要,但它可以省去编写TearDown
函数的工作量,并且在出现问题时也会删除该对象。
希望这有帮助。
答案 1 :(得分:2)
经过严格的代码修改后,我在商店里为您提供了以下内容:答案:)
class hello
{
public:
hello(const uint32_t argID, const uint8_t argCommand);
virtual ~hello();
void initialize();
};
hello::hello(const uint32_t argID, const uint8_t argCommand){/* do nothing*/}
hello::~hello(){/* do nothing*/}
void hello::initialize(){/* do nothing*/}
class helloTestFixture
{
public:
helloTestFixture();
virtual ~helloTestFixture();
hello m_object;
};
helloTestFixture::helloTestFixture():m_object(0,0){/* do nothing */}
helloTestFixture::~helloTestFixture(){/* do nothing */}
int main()
{
helloTestFixture htf;
htf.m_object.initialize();
}
这编译并运行良好,希望这能回答你的问题。 :)