elasticsearch.net - 将 JSON 转换为有效的 ElasticSearch.NET 搜索响应对象以进行模拟
问题描述
我正在为使用 ElasticSearch.NET 从 ES 读取的系统编写一些测试。该程序将搜索结果转换为不同的格式。
我想在测试中做的是使用一个大的 JSON 文件作为 ES 的模拟响应,以测试转换器是否工作。
但是,我需要为转换器创建一个有效的ISearchResponse
实例,而我发现模拟结果的唯一方法是手动创建层次结构中的每个对象,例如:
var aggregations = new AggregateDictionary(new Dictionary<string, IAggregate>
{
["my_aggregate"] = new BucketAggregate
{
Items = new List<IBucket>()
{
new DateHistogramBucket(new Dictionary<string, IAggregate>()
{
{
"key", new KeyedValueAggregate(){Value = 10, ValueAsString = "10"}
}
})
}.AsReadOnly()
}
});
searchResponse.Aggregations.Returns(info => new AggregateDictionary(aggregations));
但是,我想模拟一个更大的响应对象,而不必对其进行精确建模,因为这可能会导致无法预料的问题。
是否有某种序列化程序可用于将 JSON 对象转换为 ElasticSearch.NET 搜索响应对象,甚至是单个聚合字典?
解决方案
看起来可以通过一起模拟连接和客户端来实现,这是一个示例:
jsonObjectAsString
是字符串格式的模拟 JSON。
var responseBytes = Encoding.UTF8.GetBytes(jsonObjectAsString);
var connection = new InMemoryConnection(responseBytes, 200);
var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(connectionPool, connection).DefaultIndex("my_aggregate");
var client = new ElasticClient(settings);
var searchResponse = client.Search<WebhookTotalTimeRecord>();
将searchResponse
是具有正确数据的有效ISearchResponse
对象。
推荐阅读
- java - 使用 mvn k8s:build 构建 docker 映像时,JKube maven 插件找不到 jar 文件
- bash - 如何生成随机数然后将其传递给命令行参数?
- javascript - 如何使用javascript按月份名称按字符串排序?
- firebase - NativeScript-Vue Firebase + FireStore 使用
- javascript - 在样式组件中使用全局样式时遇到问题
- r - R中的基因组坐标
- node.js - 将默认 chrome 配置文件与我的 chrome 应用程序使用的 puppeteer 一起使用
- css - 缩放 - CSS 只是一些分辨率
- macos - 使用 smcFanControl CLI 向 SMC 反复写入值后,Mac 的 SMC 进入“监控模式”
- postgresql - Big Sur 上的 Postgresql@12 无法启动