如何将EXPECT_CALL设置为在特定时间后调用的函数?

时间:2015-07-27 12:58:56

标签: googletest gmock

我在某些功能上设定了一些期望(使用gtest和gmock),例如:

EXPECT_CALL(mockedTimer, expired()).Times(1);

我如何设定期望做以下事情:

"预计此功能将在100毫秒内完成"吗

1 个答案:

答案 0 :(得分:1)

执行此操作的最简单方法可能是设置一个计时器来测量调用expired()所需的时间,并添加一个持续时间为100毫秒的测试断言。

在测试环境中,它看起来像这样:

void startStopwatch();
void stopStopwarch();
unsigned getStopwatchResult();

TEST(TimerTest, TimerExpiresIn100ms) {

    // set up mockTimer, etc.
    EXPECT_CALL(mockedTimer, expired()).WillOnce(Invoke(&stopStopwatch));
    startStopwatch();
    // test logic, which waits until expired() is called, goes here
    ASSERT_EQ(100u, getStopwatchResult());
}

当然,这非常粗糙,但你明白了。

如果这有用,请告诉我。在编辑性说明中,通常,依赖于特定时间的测试(即,它们依赖于在特定时间范围内发生的事件)是相当不可靠的。除非有一个非常这个100ms约束的充分理由,否则重新考虑测试逻辑可能是值得的。