c++ 在Insequence EXPECT_CALL中覆盖ON_CALL默认操作

ui7jx7zq  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(200)

我只想在我的一个测试用例中覆盖ON_CALL默认操作。但是我不能得到我想要的结果。
根据gMock Cookbook,它提到如果存在匹配的EXPECT_CALL,则可以替换ON_CALL默认操作。
但是,在Insequence子句中覆盖它似乎不起作用。

void SetUp()
{
    ON_CALL(mock, GetNumofChild()).WillByDefault((Return(2));
    /*other on_call defaults*/
}

TEST_F(Testing, TestGetValue){
    {
        testing::InSequence seq;

         /*  other expect_call  */
        EXPECT_CALL(mock, GetNumofChild()).WillOnce((Return(10));
        /*  other expect_call  */
    }

    Foo();
}

运行时期间

uint8 u8NumOfChild = m_obj.GetNumofChild();    
   // Result: u8NumOfChild equal to 2, result by ON_CALL
   // Expected: u8NumOfChild equal to 10, overridden by EXPECT_CALL
plicqrtu

plicqrtu1#

回答我自己的问题,因为我找到了它的根本原因。
由于EXPECT_CALL是按顺序执行的,因此不满足先前的顺序EXPECT_CALL。因此不调用“预期”EXPECT_CALL,而是调用ON_CALL默认操作。

TEST_F(Testing, TestGetValue){
    {
        testing::InSequence seq;

         /*  other expect_call  */ <-- Not fulfilled
        EXPECT_CALL(mock, GetNumofChild()).WillOnce((Return(10));
        /*  other expect_call  */
    }

    Foo();
}

相关问题