作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是第一次尝试使用 GMock(用于 C++ 的谷歌模拟框架)。我有以下类(class):
class LocalCache
{
public:
virtual time_t GetCurrentTime() = 0;
virtual int AddEntry(const std::string key, std::string& value);
virtual int GetEntry(const std::string key, std::string& value);
};
GetEntry
方法调用 GetCurrentTime
调用。我想模拟 GetCurrentTime 方法,以便我可以在测试中提前时钟以测试作为 GetEntry
调用的一部分发生的条目的老化(请不要问我为什么老化是作为 GetEntry
调用的一部分完成的...这是另一个讨论 :( )。这是我的模拟类:
class MockLocalCache : public LocalCache
{
public:
using LocalCache::GetCurrentTime;
MOCK_METHOD0(GetCurrentTime, time_t());
MockLocalCache()
: mCurrentTime(0)
{
}
void EnableFakeTime()
{
ON_CALL(*this, GetCurrentTime()).WillByDefault(Return(mCurrentTime));
}
void SetTime(time_t now) { mCurrentTime = now; }
private:
time_t mCurrentTime;
};
TEST(MockTest, TimeTest)
{
MockLocalCache mockCache;
mockCache.EnableFakeTime();
std::string key("mykey");
std::string value("My Value");
EXPECT_TRUE(mockCache.AddEntry(key, value));
mockCache.SetTime(10); // advance 10 seconds
std::string expected;
EXPECT_TRUE(mockCache.GetEntry(key, expected));
}
当我运行测试时,我希望我的模拟 GetCurrentTime
函数返回 mCurrentTime
值。但是,我得到以下错误输出:
GMOCK WARNING:
Uninteresting mock function call - taking default action specified at:
..../test_local_cache.cpp:62:
Function call: GetCurrentTime()
Returns: 0
Stack trace:
如果有人可以让我知道我做错了什么以及如何解决它,我将不胜感激。提前致谢。
最佳答案
仅作记录( future 的人会发现这个问题,比如我),而 PiotrNycz's answer如果可以的话,这是最好的选择(将测试值直接保存在测试中)——在某些情况下,确实有必要从字段或变量返回“实时”返回值。
相应的文档是 here ;特别是:
Return(field)
不起作用(它在定义操作时复制字段的当前值)Return(ByRef(field))
也不起作用(它的作用与上面完全相同,与您的预期相反)ReturnRef(field)
无法编译(因为返回类型不是引用)ReturnPointee(&field)
确实有效(它返回实际调用该方法时的值)当然,您必须确保无论何时调用该方法,指针都保持有效,因为它现在被直接使用,而不是制作拷贝。
关于c++ - GMock : How to return mock class variable as the return value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32534306/
我是一名优秀的程序员,十分优秀!