У меня есть следующий метод:
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
в таком виде тоже не сработает.
Вместо передачи объекта по значению / ссылке, передать указатель.
(Я использую 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.
Других решений пока нет …