我是gmock的新手,我想了解使用SaveArg時發生的情況。C++ gmock - 將空指針傳遞給SaveArg時會發生什麼
這是我在gmock實況發現:
SaveArg<N>(pointer)
:保存了N次(從0開始)參數*指針。
這是否意味着:
使「指針」點到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爲空指針的分段錯誤。
我有一個類似於上面的情況,其中我將一個nullptr傳遞給SaveArg並且不會出現段錯誤,但測試也不會傳遞。
如果你們能幫助我,我會非常感激。
由於
SaveArg是(2)。 [實施代碼](https://github.com/google/googletest/blob/48ee8e98abc950abd8541e15550b18f8f6cfb3a9/googlemock/include/gmock/gmock-more-actions.h#L172)非常清楚。 – VladLosev
我寫了另一段測試代碼,可以確認(2)是實際行爲。 非常感謝你幫助我@iheanyi VladLosev。 –