`const std :: string&`参数的“任何值”

问题描述 投票:2回答:1

我有一个以const std::string &为参数的函数。我想写这样的东西:

EXPECT_CALL(mock, convertString(A<std::string>())).Times(0);

编译失败:

no known conversion for argument 1 from 'testing::Matcher<std::basic_string<char> >' to 'const testing::Matcher<const std::basic_string<char>&>&'

我错过了什么吗?

对于那些倾向于试验的人来说,这是CVE:

#include <string>

#include <gtest/gtest.h>
#include <gmock/gmock.h>


struct ToBeMocked {
    virtual ~ToBeMocked() = default;
    virtual void callMe(const std::string &arg) = 0;
};

struct Mock : public ToBeMocked {
    MOCK_METHOD1(callMe, void (const std::string &arg));
};


    TEST(Test, test)
{
    Mock mock;
    EXPECT_CALL(mock, callMe(::testing::An<std::string>()));
    mock.callMe("aaa");
}

附:我知道StrictMock的解决方法,并将使用它。但是...... A<T>()没有使用const ref论证似乎是疏忽......

c++ gmock
1个回答
1
投票

答案结果很简单:

EXPECT_CALL(mock, callMe(::testing::An<const std::string &>()));

使用函数参数的EXACT类型,而不是值类型。

© www.soinside.com 2019 - 2024. All rights reserved.