如果预期呼叫过度饱和,Google Test / Mock测试将失败

时间:2011-11-28 16:24:21

标签: c++ unit-testing googletest googlemock

如果调用google mocked方法超过预期次数,我怎样才能使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);

但是在嵌入式项目中没有使用异常。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我认为你应该使用严格的模拟测试。

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

答案 1 :(得分:1)

  

但是在嵌入式项目中没有使用异常。

没关系,因为您不应该在嵌入式平台上运行单元测试,而是为您的PC运行。

设定期望值可以减少到:

EXPECT_CALL(io, IO_Read(0x01)).Times( AtLeast( 10 ) );

不满足条件会抛出异常。

要让googlemock库针对失败的期望抛出异常:

::testing::GTEST_FLAG(throw_on_failure) = true;