如果预期呼叫过度饱和,Google测试/模拟测试失败
问题描述:
如果谷歌测试方法被调用超过预期时间,我该如何让谷歌测试失败?如果预期呼叫过度饱和,Google测试/模拟测试失败
这里是例子:
class MockIO : iIO
{
MOCK_METHOD1(IO_Read, void (uint8_t));
};
TEST(case, test)
{
MockIO io;
EXPECT_CALL(io, IO_Read(0x01)).Times(10);
for (i=0; i<20; i++)
io.IO_Read(0x01);
}
按我的理解,我应该尝试
EXPECT_CALL(io, IO_Read(0x01)).Times(10).Throw(exception);
但在不使用异常的嵌入式项目。
任何想法?
答
我认为你应该使用严格的嘲弄为您的测试。
TEST(case, test){
StrictMock<MockIO> io;
EXPECT_CALL(io, IO_Read(0x01)).Times(10);
当使用Strictmock时,预期的呼叫不会导致测试失败。
http://code.google.com/p/googlemock/wiki/CookBook#Nice_Mocks_and_Strict_Mocks
答
但是在嵌入式项目中没有使用例外。
这并不重要,因为您不应该构建您的单元测试,以便在嵌入式平台上运行,而是为您的PC运行。
设定期望可以减少到这一点:
EXPECT_CALL(io, IO_Read(0x01)).Times(AtLeast(10));
不满足该条件是要抛出异常。
为了使googlemock库对不合格的预期抛出异常:
::testing::GTEST_FLAG(throw_on_failure) = true;