【问题标题】:GMock cannot disambiguate overloaded functionGMock 无法消除重载函数的歧义
【发布时间】:2022-07-26 10:08:49
【问题描述】:

我们有一个带有重载方法的模拟类。变量/类名已更改

class MockBuilderClass
: public IBuilder
{
public:
    MOCK_METHOD1(Method, IBuilder& (const std::vector<std::shared_ptr<IData>>& data));
    MOCK_METHOD1(Method, IBuilder& (const std::shared_ptr<IData>& data));
};

上下文接口

class IBuilder
{
public:
    virtual std::shared_ptr<IThing> Build() = 0;

    virtual IBuilder& Method(const std::vector<std::shared_ptr<IData>>& data) = 0;
    virtual IBuilder& Method(const std::shared_ptr<IData>& data) = 0;
};

在测试中,我们会像这样进行期望调用

auto expectedData = std::make_shared<DataItem>("Data");
EXPECT_CALL(*mockBuilder, Method(TypedEq<std::shared_ptr<IData>&>(expectedData)))
    .WillOnce(ReturnRef(*mockBuilder));

这显然不足以消除对方法的调用的歧义。我们得到一个错误:

E0304 重载函数“MockBuilder::gmock_Method”的实例与参数列表不匹配

我尝试了其他匹配器函数(Matcher、Eq、ref 等)的各种组合,但没有取得任何进展。这里有什么问题?

【问题讨论】:

    标签: c++ googletest smart-pointers googlemock


    【解决方案1】:

    找到解决方案:

    EXPECT_CALL(*mockBuilder, Method(TypedEq<std::shared_ptr<IData>&>(expectedData)))
        .WillOnce(ReturnRef(*mockBuilder));
    

    需要:

    EXPECT_CALL(*mockBuilder, Method(TypedEq<const std::shared_ptr<IData>&>(expectedData)))
        .WillOnce(ReturnRef(*mockBuilder));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多