RapidJSON :: Value&]的GoogleTest / Mock SaveArg>

问题描述 投票:0回答:1

我正在尝试使用GoogleTest来获取传递给函数的参数。该函数的声明是这样的

void foo(rapidjson::Value &element, int number) {}

我会这样创建ON_CALL

rapidjson::Value elementVal;
ON_CALL(SomeClassNameWhereFooIsAMember, foo).WillByDefault(SaveArg<0>(&elementVal));

我什至无法编译。

error C2248: 'rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>::GenericValue': cannot access private member declared in class 'rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>'

有什么想法吗?

更新:

我根据克里斯·奥尔森的回答尝试了以下内容

#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "rapidjson/document.h"

using namespace ::testing;

class FooClass
{
public:
    virtual void foo(rapidjson::Value& element, int number) {}
};

class MockFoo : public FooClass
{
public:
    MOCK_METHOD(void, foo, (rapidjson::Value& element, int number));
};

ACTION_P(SaveRapidJsonValueArg, p)
{
    rapidjson::Document d;  // Needed only to get the required allocator param
    p->CopyFrom(arg0, d.GetAllocator());
}

TEST(RapidJsonTests, SaveArgTest)
{
    MockFoo mock;

    rapidjson::Document document;
    rapidjson::Document::AllocatorType& allocator = document.GetAllocator();

    rapidjson::Value object(rapidjson::kObjectType);
    object.AddMember("Math", "50", allocator);
    object.AddMember("Science", "70", allocator);
    object.AddMember("English", "50", allocator);
    object.AddMember("Social Science", "70", allocator);

    rapidjson::Value saveVal;

    ON_CALL(mock, foo).WillByDefault(SaveRapidJsonValueArg(&saveVal));

    mock.foo(object, 1);

    if (saveVal["Math"].HasMember("Math"))
        std::cout << saveVal["Math"].GetString() << "\n";
}

HasMember()调用时执行崩溃。

我正在尝试使用GoogleTest来获取传递给函数的参数。该函数的声明就像这样void foo(rapidjson :: Value&element,int number){}我要创建一个...

c++ googletest googlemock
1个回答
0
投票

很难从显示的代码中分辨出问题出在哪里。您应该尽可能提供minimal reproducible example

© www.soinside.com 2019 - 2024. All rights reserved.