我是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。 –