2016-07-21 16 views

答えて

3

変更の実装:今すぐ

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上のN個のセットの期待:

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

代替は、1と0のパラメータを持つバージョンを有する方法をオーバーロードすることであろう。あなたのためにどの方法がうまくいくかを判断するのはあなた次第です。

+0

テスト目的のためだけに元のコードに変更がなければ、より良いでしょう。ところで、他の方法がない場合、私はあなたの答えを最高のものとして受け入れます。 – nyarlathotep108

+0

@ nyarlathotep108代替手段がありますが、元のコードを変更する必要もあります。私の更新された答えを見てください。 –

+0

@ nyarlathotep108あなたがより良い解決策を見つけられなかった場合、またはあなたがそれを私たちと共有していただければ、回答を受け入れたものとしてマークすることを検討してください。 –

6

これはマルコの答えの選択肢です:あなたがあなたの元のコードを変更したくない場合は、単にモッククラスにヘルパーを実装:

class A 
{ 
public: 
    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)); 
+0

これは正解でなければなりません。デフォルトのパラメータの目的は、プロダクションコードの無関係なオーバーロードされたメソッドを避けることです。 –

関連する問題