web-dev-qa-db-ja.com

Google Mockでオプションのパラメーターを使用してメソッドをモックする方法は?

Google Mockでオプションのパラメーターを使用してメソッドをモックする方法は?例えば:

class A
{ 
public:
    void set_enable( bool enabled = true );
};

class MockA : public A
{
    MOCK_METHOD1( set_enable, void( bool ) );    // this is not working
};
17
nyarlathotep108

これはMarkoの答えの代替手段です。元のコードを変更したくない場合は、モッククラスにヘルパーを実装するだけです。

class A
{ 
public:
    virtual void set_enable( bool enabled = true );
};

class MockA : public A
{
    MOCK_METHOD1( set_enable_impl, void( bool ) );
    virtual void set_enable( bool enabled = true )
    {
        set_enable_impl( enabled );
    {
};

たとえば、テストではset_enable_implの呼び出しを期待する必要があります。たとえば、

MockA mockA;
EXPECT_CALL(mockA, set_enable_impl(true)).Times(Exactly(1));
EXPECT_CALL(mockA, set_enable_impl(false)).Times(Exactly(1));
17
PiQuer

次のように、ヘルパーメソッドを使用するようにメソッドset_enableの実装を変更します。

void set_enable( bool enabled = true ) { set_enable_impl(enabled); }

次に、クラスMockAで、set_enable_implのモックメソッドを作成します。

MOCK_METHOD1( set_enable_impl, void( bool ) );

次に、本番用コードでは、最初と同じようにset_enableを使用するだけですが、テストではメソッドset_enable_implに期待値を設定できます。

MockA mockA;
EXPECT_CALL(mockA, set_enable_impl(_))...;

別の方法としては、1つのパラメーターと0つのパラメーターを持つバージョンを持つことによってメソッドをオーバーロードすることです。どちらの方法がケースに適しているかを判断するのはあなた次第です。

2
Marko Popovic

PiQuerの回答に対するいくつかの変更。以下のように、MOCK_METHOD1のbool型の変数に「有効」という名前を追加するだけの場合、ラッパーは必要ありません。

class A
{ 
    public:
    void set_enable( bool enabled = true );
};

class MockA : public A
{
    MOCK_METHOD1( set_enable, void( bool enabled ) );
};
0
user3508953