【发布时间】:2019-06-11 12:21:49
【问题描述】:
我尝试模拟表示 NVRAM 的现有类的行为和 API。 API 是:
bool Init(Uint8* dataPointer);
bool Store(); //Writes the data from dataPointer into the NVRAM
bool Restore(); //Writes the data from NVRAM into the dataPointer
我的测试场景如下:
创建
ClassUnderTest,同时调用Init方法在我的
ClassUnderTest中调用另一个方法,它调用Restore方法。而且我希望能够以某种方式控制我的模拟,即在调用Restore-方法之后设置dataPointer的值。
或者在伪代码中:
MockFoo foo;
EXPECT_CALL(foo, Init(dataPointer)).WillOnce(Return(true));
EXPECT_CALL(foo, Restore()).WillOnce(DoAll(memcpy(dataPointer, testValues, sizeOf(testValues)), Return(true)));
到目前为止我所尝试的:
- 来自 googleMock 的默认操作(例如 SaveArg):允许我将数据写入
dataPointer,但仅限于Init调用。 - 编写 ACTION_TEMPLATE 以将
dataPointer保存在 lokal 变量中,然后在调用Restore时更改其值: 据我了解,我只能将 VALUE_PARAMS 添加到 ACTION_TEMPLATE,因此我可以将值传递到模板中,但无法通过某个指针再次分发它们。 - 我查看了 ActionInterface & Polymorphic Actions,如果我正确理解文档,它们与 ACTION_TEMPLATE 的限制相同,就我的问题而言。
最后,我的主要问题是:
有没有办法在 Init 调用期间保存 dataPointer 以供以后使用?
【问题讨论】:
标签: c++ unit-testing googlemock