1

我正在尝试为我的新项目进行广泛的测试,但我遇到了问题。

基本上我想测试 MyClass。MyClass 使用了其他几个我不需要/不想为测试目的完成工作的课程。所以我创建了模拟(我使用 gtest 和 gmock 进行测试)

但是 MyClass 在它的构造函数中实例化它需要的一切,并在析构函数中释放它。我认为这就是RAII。

所以我想,我应该创建某种工厂,它创建所有内容并将其提供给 MyClass 的构造函数。那家工厂可能有假货用于测试目的。但那不再是 RAII 了吗?

那么这里有什么好的解决方案?

4

1 回答 1

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());
}
于 2010-06-15T20:30:09.093 回答