【发布时间】:2015-12-08 15:42:48
【问题描述】:
我第一次尝试使用 GMock(用于 C++ 的谷歌模拟框架)。我有以下课程:
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:
如果有人能告诉我我做错了什么以及如何解决它,我将不胜感激。提前致谢。
【问题讨论】:
标签: c++ unit-testing googletest googlemock gmock