【发布时间】:2017-10-12 17:24:33
【问题描述】:
我是 gmock 的新手,我想了解使用 SaveArg 时会发生什么。
这是我在 gmock 文档中找到的内容:
SaveArg<N>(pointer) :将第 N 个(从 0 开始)参数保存到 *pointer。
这是什么意思:
-
使“指针”指向第 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 并且没有出现分段错误,但测试也没有通过。
如果你们能帮助我,将不胜感激。
谢谢
【问题讨论】:
标签: c++ pointers gmock nullptr