Я впервые пытаюсь использовать GMock (фреймворк google mocking для 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));
}
Когда я запускаю тест, я ожидал, что значение mCurrentTime
вернет моя фиктивная функция GetCurrentTime
. Однако я получаю следующий вывод ошибки:
GMOCK WARNING:
Uninteresting mock function call - taking default action specified at:
..../test_local_cache.cpp:62:
Function call: GetCurrentTime()
Returns: 0
Stack trace:
Был бы признателен, если бы кто-нибудь мог сообщить мне, что я делаю не так и как это исправить. Заранее спасибо.