我有一个以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>&>&'
我想念什么吗?
这里是MCVE,适合那些有经验的人:
#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");
}
P.S。我知道StrictMock解决方法,并将使用它。但是... A<T>()
不能使用const ref参数似乎是一个疏忽...
答案 0 :(得分:1)
答案很简单:
EXPECT_CALL(mock, callMe(::testing::An<const std::string &>()));
使用函数参数的精确类型,而不是值类型。