Как использовать ON_CALL и Matcher в gtest с перегруженными издеваемыми n-функциями?C++

Программы на C++. Форум разработчиков
Anonymous
 Как использовать ON_CALL и Matcher в gtest с перегруженными издеваемыми n-функциями?

Сообщение Anonymous »

Я имитирую класс с двумя перегруженными методами, например:

Код: Выделить всё

//required because some versions of gtest messes with extra commas in MOCK_METHOD
typedef std::pair  KeyValueType;
class MockSUT : public SUT
{
public:

MOCK_METHOD(bool, foo, (const std::vector &data), (override));

MOCK_METHOD(bool, foo, (const std::string &key, const std::string& data), (override));
};
В тесте я делаю что-то вроде этого (код не оптимален, но я пытаюсь понять, что происходит, и, возможно, EXPECT_CALL здесь лучше, но я пытаюсь понять):< /p>

Код: Выделить всё

TEST_F(fixture, test)
{
...
std::shared_ptr mock = std::make_shared();
ON_CALL(..,..); //on call on another mock that succeds

ON_CALL(*mock.get(), foo(::testing::Matcher()))
.WillByDefault([&](const std::vector& data)-> bool{
EXPECT_TRUE(true);
return true;
});
}
где Matcher очевидно должен использоваться в случаях перегрузки. Также мне пришлось указать возвращаемое значение лямбды с помощью ->bool.
Исходная функция вызывается следующим образом:

Код: Выделить всё

shared_pointer_castom->foo({
{
defined_char_array,
static_cast(someVal)
},
{
defined_car_array2,
static_cast(someOtherVal)
}]
});
Отлаживая код, я вижу, что он работает и первый MOCk_METHOD вызывается правильно. После этого я получаю исключение нулевого указателя в gtest, а именно в /loki/loki-dev-env/Orin/01_linux64/include/gtest/gtest-matchers.h:269:: Условие vtable_ != nullptr не выполнено. (он не входит в лямбду ON_CALL). Код следующий:

Код: Выделить всё

template 
class MatcherBase : private MatcherDescriberInterface {
public:
// Returns true if and only if the matcher matches x; also explains the
// match result to 'listener'.
bool MatchAndExplain(const T& x, MatchResultListener* listener) const {
GTEST_CHECK_(vtable_ != nullptr);
return vtable_->match_and_explain(*this, x, listener);
}
...
Думаю, я неправильно использую ON_CALL и Matcher. Как использовать ON_CALL вместе с Matcher для тестирования перегруженного метода?

Подробнее здесь: https://stackoverflow.com/questions/790 ... nfunctions

Вернуться в «C++»