我正在尝试对我的新项目进行广泛的测试,但我遇到了问题。
基本上我想测试 MyClass。 MyClass 使用了其他几个我不需要/不想为测试目的完成工作的类。所以我创建了模拟(我使用 gtest 和 gmock 进行测试)
但是 MyClass 在它的构造函数中实例化它需要的一切,并在析构函数中释放它。我认为这就是 RAII。
所以我想,我应该创建某种工厂,它创建所有内容并将其提供给 MyClass 的构造函数。出于测试目的,该工厂可能会伪造它。但这不再是 RAII 了吗?
那么这里有什么好的解决方案呢?
最佳答案
您可以像模拟任何其他类一样模拟它。让 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());
}
关于c++ - 如何混合使用 CBD 和 RAII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048761/