如果预期呼叫过度饱和,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;