我遵循以下方法:
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
函数中以下列方式使用mock:
QMap<QString, int> fake_map;
fake_map.insert("ABC", 1);
mock().expectOneCall("getConfig").andReturnValue(fake_map);
我在CppUTest Mocking文档中找不到这样的例子。我也知道这种形式的.andReturnValue
也不起作用。
答案 0 :(得分:1)
不是传递对象by-value / -reference,而是 传递指针 。
(我在这里使用std::map
- QMap
完全相同)
您可以通过return#####Value()
方法获得模拟的返回值。由于returnPointerValue()
返回void*
,您必须将其转换为正确的指针类型。然后,您可以通过取消引用该指针来返回by-value。
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"]);
}
请注意, Pointer 和 ConstPointer 之间存在差异。