«Любое значение» для аргумента `const std :: string &` - PullRequest
2 голосов
/ 19 марта 2019

У меня есть функция, которая принимает 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");
}

PS Мне известен обходной путь StrictMock, и я буду его использовать.Но ... A<T>() не работает с аргументами const ref похоже на недосмотр ...

1 Ответ

1 голос
/ 19 марта 2019

Ответ оказывается простым:

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

Используйте тип EXACT аргумента функции, а не тип значения.

...