首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实际函数调用数不匹配EXPECT_CALL(mockImplClass,receive(_,_))

实际函数调用数不匹配EXPECT_CALL(mockImplClass,receive(_,_))
EN

Stack Overflow用户
提问于 2020-04-27 23:32:37
回答 1查看 121关注 0票数 1

在运行以下代码示例的gtest时,我遇到了问题。ignore header包含了它的可编译性和运行正常。

代码语言:javascript
运行
复制
Error:
GMOCK WARNING:
Uninteresting mock function call - returning default value.
    Function call: receive(0x7ffcee4fc990, 0x7ffcee4fc900)
          Returns: 0
NOTE: You can safely ignore the above warning unless this call should not happen.  Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call.  See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
/data/home/sipadhy/unit_test_research/gTest/ImplClassTest.cpp:174: Failure
Actual function call count doesn't match EXPECT_CALL(mockImplClass, receive(_, _))...
         Expected: to be called at least once
           Actual: never called - unsatisfied and active

示例代码:

//要模拟的where函数的主类

代码语言:javascript
运行
复制
class ImplClass
{
public:
    virtual int receive(structX* x, structY* y){ // some logic }
};

//调用主类的中间类

代码语言:javascript
运行
复制
class IntermidiateClass
{
    std::shared_ptr<ImplClass> implClassPtr = nullptr;
public:
    setImplClassptr(std::shared_ptr<ImplClass> ptr)
    {
        implClassPtr  = ptr;
    }
    int getValue()
    {
        structX x;
        structY y;
        return(implClassPtr->receive(x, y));
    }
};

//模拟类

代码语言:javascript
运行
复制
class MockImplClass: public ImplClass
{
public:
    MOCK_METHOD2(receive, int(structX, structY));
}

//测试用例

代码语言:javascript
运行
复制
TEST(MyTest, TEST1)
{
    MockImplClass mockImplClass;
    IntermidiateClass intermidiateObj;
    intermidiateObj.setImplClassptr(std::make_shared<MockImplClass>());

    EXPECT_CALL(mockImplClass, receive(_, _))
    .Times(AtLeast(1))
    .WillRepeatedly(Return(1));

    int retVal = intermidiateObj.getValue();
}

谢谢,湿婆

EN

回答 1

Stack Overflow用户

发布于 2020-04-27 23:43:33

您可以在这里创建一个全新的MockImplClass类对象:

代码语言:javascript
运行
复制
std::make_shared<MockImplClass>()

因此,您创建的第一个对象

代码语言:javascript
运行
复制
MockImplClass mockImplClass;

永远不会习惯调用receive()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61462492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档