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

How to set an EXPECT_CALL to function being called after a specific time?

我对某些函数设定了一些期望值(使用 gtest 和 gmock),例如:

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

我如何设置期望以执行以下操作:

"Expect that this function will be executed exactly in 100ms" ?

可能最简单的方法是设置一个计时器来测量调用 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());
}

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

如果这有帮助,请告诉我。在编辑说明中,一般来说,依赖于特定时间的测试(即它们依赖于在特定时间范围内发生的事件)是相当不可靠的。除非有一个 非常 很好的理由来限制这个 100 毫秒,否则重新考虑测试逻辑可能是值得的 :)