如何将 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 毫秒,否则重新考虑测试逻辑可能是值得的 :)
我对某些函数设定了一些期望值(使用 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 毫秒,否则重新考虑测试逻辑可能是值得的 :)