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 に答える