首页 文章

模拟弹性搜索响应in.Net

提问于
浏览
0

我有Elastic Search Nest库代码,需要模拟我从弹性搜索索引获得的响应 .

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

对于测试:我在快速观察后面对问题创建Nest对象 - Aggregations - 是内部受保护的属性,我无法设置此值 .

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

请建议我可以用来模拟弹性搜索嵌套对象的解决方案或任何其他方法 .

1 回答

  • 0

    如果你真的想要从客户端存根响应,你可以使用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 MyGet feed获得Elastic.Xunit .

相关问题