私はgmockが新しく、SaveArgを使用するときに何が起こるかを理解したいと思います。ここでC++ gmock - SaveArgにnullポインタを渡すと何が起こるか
は、私がgmockのドキュメンタリーで見つけたものです:
SaveArg<N>(pointer)
:*ポインタに引数(0ベース)N番目を保存します。 「ポインタ」で指さ何にN番目の引数の値を割り当てるN番目の引数、または
に
メイク「ポインタ」のポイント:
は、この平均値を行います?
私は次のような状況を考えています:私のテスト機能で、その後
class MockClass : public BaseClass { public: MOCK_METHOD1(somefunc,void(SomeType&)); };
:
SomeType val; //make this live throughout the test
SomeType* pval = nullptr;
MockClass mymock;
EXPECT_CALL(mymock, somefunc(_)).WillOnce(SaveArg<0>(pval));
//let's force a call
mymock.somefunc(val);
EXPECT_NE(nullptr, pval);
私のポイントは次のとおりです。
場合(1)が真であれば、何が起こるのでしょうか:pval = &val
- >テストが進行します。
(2)が真の場合、何が起こるのですか:*pval = val
- >これは、pvalがヌルポインタのセグメンテーション違反を引き起こします。
私はSaveArgにnullptrを渡し、セグメンテーションフォールトを取得しない上記の状況に似ていますが、テストにもパスされません。
あなたが私を助けることができたら本当に感謝します。
おかげ
SaveArgは(2)です。 [実装コード](https://github.com/google/googletest/blob/48ee8e98abc950abd8541e15550b18f8f6cfb3a9/googlemock/include/gmock/gmock-more-actions.h#L172)は、そのことを非常に明確にしています。 – VladLosev
私は別のテストコードを書いて、(2)が実際の動作であることを確認できます。 @ iheanyi VladLosevを手伝ってくれてありがとう。 –