- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用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.HasMember("Math"))
std::cout << saveVal["Math"].GetString() << "\n";
}
HasMember()
调用时崩溃。
ACTION_P2(SaveRapidJsonValueArg, valuePtr, doc)
{
valuePtr->CopyFrom(arg1, doc->GetAllocator());
}
TEST(RapidJsonTests, SaveArgTest)
{
...
...
ON_CALL(mock, foo).WillByDefault(SaveRapidJsonValueArg(&saveVal, &document));
...
...
}
最佳答案
从显示的代码很难分辨出问题出在哪里。您应该尽可能提供minimal reproducible example。
您可能会遇到的一个问题是RapidJSON不允许正常复制Value
对象。它使用移动语义代替。从RapidJSON Tutorial:
A very special decision during design of RapidJSON is that, assignment of value does not copy the source value to destination value. Instead, the value from source is moved to the destination. For example,
Value a(123);
Value b(456);
b = a; // a becomes a Null value, b becomes number 123.
Value
对象,可以使用
Value::CopyFrom
方法。可以在gMock中使用
custom action来做到这一点:
#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));
};
struct CaptureFooValue
{
void operator()(const rapidjson::Value &element, int) const
{
v.CopyFrom(element, d.GetAllocator(), true);
}
rapidjson::Value &v;
rapidjson::Document &d;
};
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(CaptureFooValue{saveVal, document});
mock.foo(object, 1);
if (saveVal.HasMember("Math"))
std::cout << saveVal["Math"].GetString() << "\n";
}
关于c++ - RapidJSON::Value&的GoogleTest/Mock SaveArg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61489528/
我需要一个构造 rapidjson::Document 并返回的函数。但是当我用这个原型(prototype)写一个函数时: rapidjson::Document progressToJson(co
我想从 JSON 字符串创建一个 rapidjson::Value,例如 [1,2,3]。注意:这不是一个完整的 JSON 对象,它只是一个 JSON 数组。在 Java 中,我可以使用 object
根据 the tutorial : Each JSON value is stored in a type called Value. A Document, representing the DOM
如何将 rapidjson 数组迭代器转换为 rapidjson::value? 我不想要关注如何获取快速 json 数组的内容或如何遍历它的答案。 我也很清楚我可以使用 rapidjson 文档中的
似乎文档也可以用作参数 void test(Value value); 而Document和Value都可以具有子值,它们之间有什么区别? 最佳答案 首先,test函数不应该编译,因为Value不支持
当我使用 rapidjson::Value 方法询问 GetType() 的类型时,它只返回以下类型: //! Type of JSON value enum Type { kNullType
我希望能够使用 RapidJSON 创建以下 JSON 输出 { "year": 2013, "league": "national", "teams": [
我想使用 Rapidjson 将嵌套结构序列化为 JSON,并且还希望能够单独序列化每个对象,因此任何实现 ToJson 的类都可以序列化为 JSON 字符串。 在以下代码中,Car 有一个 Whee
我尝试将 rapidjson::Document 对象作为函数参数传递: std::string json_to_string(rapidjson::Document jmsg) { // Con
我正在使用 RapidJSON 为我的游戏解析一些配置文件( Material 定义、组件等)。但是,我很好奇是否可以将 RapidJSON 配置为仅解析 JSON 文档中的第一层。想象一下: {
我有两个由 Rapidjson 库解析的 json 字符串。 JSON 1: { "jKey1":{ "jVal1Key1":{
我正在尝试使用 RapidJSON 解析一个 JSON 文件,其中有数千个像这样的对象 "Amateur Auteur": { "layout": "normal", "name": "Amateur
我有一个包含嵌套对象和对象数组的 Json 记录,这些字段中的键包含空格,我想将所有空格更改为 _,所以我必须迭代 json 对象中的所有键. 我的想法是编写深度优先搜索以使用 ConstMember
我搜索了这个特定错误,但没有找到任何相关问题。 我正在尝试使用 Rapidjson 来解析我的 C++ 项目中的 .json 文件,这就是我的做法(遵循 RapidJSON tutorial 的说明)
想知道是否可以直接从中提取 rapidjson::Value 的名称。 例如,假设我们有以下 JSON 数据: { "name": [ { /*some data*/
我正在尝试使用 RapidJson 在 C++ 中解析 json 数据。我不知道我哪里做错了,但我的断言失败了。当我尝试调试它的显示 sigabrt 时它运行断言行。社区 我感谢您的见解。感谢您回答这
我有以下代码将数据添加到 rapidjson::Document,声明如下: rapidjson::Document rest; rest.SetObject(); 在循环中。 Value v(val
我有一个像这样的 JSON 字符串: {"callCommand":{"command":"car","floor":"2","landing":"front"}} 现在,我想检查是否有名为 comm
我使用 C++ 生成了以下 JSON: { "ProfileID": "DUO1", "ProfileName": "Sample" } 用于生成的代码是: string jsonDa
我正在尝试使用 rapidjson 创建一个 json 文档,但我不知道如何复制以下文档的一部分,特别是以“allocations”开头的嵌套对象,用于我所做的其他元素 Value valObject
我是一名优秀的程序员,十分优秀!