2017-06-12 29 views
0

myMockによって呼び出された「somePrivateMethod」に渡されたMyObjectClassインスタンスへの参照を取得したいとします。EXPECT_CALL引数への参照を取得する方法

次のスニペットを使用しますが、より良い方法があると確信しています。

namespace { 
MyObjectClass *myObjectPtr; 

ACTION(getIt) 
{ 
    myObjectPtr = &arg0; 
} 
} 
... 

... 

EXPECT_CALL(*myMock, somePrivateMethod(testing::_)).WillOnce(testing::WithArg<0>(getIt())); 

私の問題は明らかに、私はその議論への言及を得る必要があります。私がそれを望む理由はここには関係ありません。私はsomePrivateMethodの引数へのポインタを設定する方法を知る必要があります。

+1

あなたのコードは、クラスの振る舞いではないその内部実装をテストする必要があります。また、それを理解することが難しいということはひどく言われています。だから私は[XY問題](http://xyproblem.info/)を疑っています。 –

+0

私はそれをテストしたくありません。このケースではプライベートメンバーにアクセスする必要がありますが、任意のオブジェクトにすることができます。 Mockはそのオブジェクトを引数として使用します。私はSaveArg、SaveArgPointeeを使用しようとしますが、値をコピーするだけです。 – pZCZ

+0

テストしたくない場合、なぜ 'gtest'と' gmock'を使用しているのですか? –

答えて

0

これを行う方法の一つは、class A

public: const int * get_b { return &b; }

の宣言にパブリックget方法を記述している。しかし、あなたは、この変数の値を確認したいので、あなたがポインタを必要としないと返すことができますget関数内の変数の値

public: int get_b { return b; }

+0

モックされている関数の引数として使用されるプライベートオブジェクトにアクセスするために必要なコードを変更できません。 – pZCZ

+0

コードを変更できないので、 'class A'のプライベートメンバーにアクセスすることはできません。クラスメソッドと 'friend'関数だけがプライベートメンバーにアクセスできます。 –

関連する問題