Как смоделировать метод, возвращающий объект, используя CppUTest

У меня есть следующий метод:

QMap<QString, int> DefaultConfig::getConfig()
{
QMap<QString, int> result;
result.insert("Error", LOG_LOCAL0);
result.insert("Application", LOG_LOCAL1);
result.insert("System", LOG_LOCAL2);
result.insert("Debug", LOG_LOCAL3);
result.insert("Trace", LOG_LOCAL4);
return result;
}

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

QMap<QString, int> DefaultConfig::getConfig() {
mock().actualCall("getConfig");
return ?
}

но я не знаю, как издеваться над возвращаемым значением? Я хотел бы использовать макет следующим образом в TEST функция:

QMap<QString, int> fake_map;
fake_map.insert("ABC", 1);
mock().expectOneCall("getConfig").andReturnValue(fake_map);

Я не могу найти такой пример в документации CppUTest Mocking. Я тоже знаю что .andReturnValue в таком виде тоже не сработает.

1

Решение

Вместо передачи объекта по значению / ссылке, передать указатель.


Пример:

(Я использую std::map Вот — QMap точно так же)

издеваться

Вы получаете возвращаемое значение для макета return#####Value() методы. поскольку returnPointerValue() возвращает void* Вы должны привести его к правильному типу указателя. Затем вы можете вернуть значение по значению, разыменовав этот указатель.

std::map<std::string, int> getConfig()
{
auto returnValue = mock().actualCall("getConfig")
.returnPointerValue();
return *static_cast<std::map<std::string, int>*>(returnValue);
}

Тестовое задание

Ожидаемое возвращаемое значение передается указателем:

TEST(MapMockTest, mockReturningAMap)
{
std::map<std::string, int> expected = { {"abc", 123} };
mock().expectOneCall("getConfig").andReturnValue(&expected);

auto cfg = getConfig();
CHECK_EQUAL(123, cfg["abc"]);
}

Пожалуйста, нет, есть разница между Указатель а также ConstPointer.

1

Другие решения

Других решений пока нет …