gpt4 book ai didi

elasticsearch - 在.Net 中模拟 Elasticsearch 响应

转载 作者:行者123 更新时间:2023-12-02 22:15:53 30 4
gpt4 key购买 nike

我有 Elastic Search Nest 库代码,需要模拟我从 Elasticsearch 索引获得的响应。

var obj = service.Search<TestDocument>(new student().Query());
var Name= obj.Aggs.Terms("Name");

用于测试:我在快速观看后创建 Nest 对象,但面临问题 -Aggregations - 是一个内部 protected 属性,我无法设置此值。

                           new Nest.KeyedBucket<object>
{
Key="XYZ school",
KeyAsString=null,
Aggregations=new Dictionary<string, IAggregationContainer>{}
}

请建议我可以用来模拟 Elasticsearch 嵌套对象的解决方案或任何其他方法。

最佳答案

如果您真的想要 stub 来自客户端的响应,您可以使用 Moq 执行以下操作

var client = new Mock<IElasticClient>();

var searchResponse = new Mock<ISearchResponse<object>>();

var aggregations = new AggregateDictionary(new Dictionary<string, IAggregate> {
["Name"] = new BucketAggregate
{
Items = new List<KeyedBucket<object>>
{
new Nest.KeyedBucket<object>(new Dictionary<string, IAggregate>())
{
Key = "XYZ school",
KeyAsString = null,
DocCount = 5
}
}.AsReadOnly()
}
});

searchResponse.Setup(s => s.Aggregations).Returns(aggregations);

client.Setup(c => c.Search<object>(It.IsAny<Func<SearchDescriptor<object>, ISearchRequest>>()))
.Returns(searchResponse.Object);

var response = client.Object.Search<object>(s => s);

var terms = response.Aggregations.Terms("Name");

另一种方法是使用 InMemoryConnection and return known JSON in response to a request. .

但是,出于测试目的,运行 Elasticsearch 实例并对其执行集成测试可能会更好。看看Elastic.Xunit它提供了一种简单的方法来启动 Elasticsearch 集群以进行测试。客户端在集成测试中使用它。

您可以从 the Appveyor feed 获取 Elastic.Xunit .

关于elasticsearch - 在.Net 中模拟 Elasticsearch 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52969724/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com