1

私は次の方法を持っています:

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 モッキングのドキュメントでそのような例を見つけることができません。.andReturnValueまた、この形式でも機能しないことも知っています。

4

1 に答える 1

1

オブジェクトを値/参照で渡す代わりに、ポインターで渡します。


例:

(私はstd::maphereを使用しています–QMapまったく同じです)

モック

メソッドによってモックの戻り値を取得しreturn#####Value()ます。returnPointerValue()a を返すので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"]);
}

PointerConstPointerには違いがあります。

于 2016-07-22T19:35:55.493 に答える