Mock Elastic Поиск ответа в .Net - PullRequest
       45

Mock Elastic Поиск ответа в .Net

0 голосов
/ 24 октября 2018

У меня есть код библиотеки Elastic Search Nest, и мне нужно смоделировать ответ, который я получаю из индекса эластичного поиска.

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

Для тестирования: я создаю объект Nest после выполнения быстрого просмотра, но сталкиваюсь с проблемой - Агрегаты - это внутреннее защищенное свойство, и я не могу установить это значение.

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

Пожалуйста, предложите решение или любой другой подход, который я могу использовать для макета объекта упругого поиска.

1 Ответ

0 голосов
/ 26 октября 2018

Если вы действительно хотите заблокировать ответ от клиента, вы можете сделать что-то вроде следующего с 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 и верните известный JSON в ответ на запрос. .

Однако для целей тестирования может быть лучше запустить экземпляр Elasticsearch и выполнить с ним интеграционные тесты.Взгляните на Elastic.Xunit , который предоставляет простой способ раскрутить кластер Elasticsearch для целей тестирования.Это используется клиентом в интеграционных тестах.

Вы можете получить Elastic.Xunit из фида Appveyor .

...