我正在尝试使用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){}我要创建一个...
很难从显示的代码中分辨出问题出在哪里。您应该尽可能提供minimal reproducible example。