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
};
これは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));
次のように、ヘルパーメソッドを使用するようにメソッド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つのパラメーターを持つバージョンを持つことによってメソッドをオーバーロードすることです。どちらの方法がケースに適しているかを判断するのはあなた次第です。
PiQuerの回答に対するいくつかの変更。以下のように、MOCK_METHOD1
のbool型の変数に「有効」という名前を追加するだけの場合、ラッパーは必要ありません。
class A
{
public:
void set_enable( bool enabled = true );
};
class MockA : public A
{
MOCK_METHOD1( set_enable, void( bool enabled ) );
};