我正在尝试为我的新项目进行大量测试,但我遇到了问题。
基本上我想测试MyClass。 MyClass使用了其他几个我不需要/想要为测试目的而做的工作。所以我创建了模拟(我使用gtest和gmock进行测试)
但是MyClass在它的构造函数中实例化它需要的所有内容并在析构函数中释放它。我认为这是RAII。
所以我想,我应该创建一些工厂,它创建所有东西并将它提供给MyClass的构造函数。该工厂可能因为测试目的而伪造。但那不再是RAII吧?
那么这里有什么好的解决方案?
答案 0 :(得分:2)
你嘲笑它就像你嘲笑任何其他类一样。让RAII类的构造函数处理它。
class MyInterface
{
virtual void MyApiFunction(int myArg)
{
::MyApiFunction(myArg);
}
};
class MyRAII : boost::noncopyable //Shouldn't be copying RAII classes, right?
{
MyInterface *api;
public:
MyRAII(MyInterface *method = new MyInterface)
: api(method)
{
//Aquire resource
}
~MyRAII()
{
//Release resource
delete api;
}
};
class MockInterface : public MyInterface
{
MOCK_METHOD1(MyApiFunction, void(int));
};
TEST(Hello, Hello)
{
std::auto_ptr<MockInterface> mock(new MockInterface);
EXPECT_CALL(*mock, ....)...;
MyRAII unitUnderTest(mock.release());
}