c# - 访问 SearchDescriptor 属性以进行测试

标签 c# elasticsearch nunit nest

我将查询构建和查询执行分开,所以我有一个返回 SearchDescriptor<Video> 的 QueryBuilder

所以将它放入我的 Web Api Controller 的上下文中:

SearchDescriptor<ElasticVideo> documentQuery = _queryBuilder.BuildDocumentQuery(elasticSearchParameters);
ISearchResponse<ElasticVideo> documentResults = _videoRepository.Search(documentQuery);

但是在测试 QueryBuilder 时,我无法访问返回的 SearchDescriptor 上的任何属性以验证我的测试,例如:

        [Test]
        public void BuildDocumentQuery_WithEmptyPhrase_ReturnsProperlyFormedQueryDescriptor()
        {
            var elasticSearchVideoQueryBuilder = new ElasticSearchVideoQueryBuilder();
            var descriptor = elasticSearchVideoQueryBuilder.BuildDocumentQuery(new ElasticSearchVideoParameters());
            descriptor.// How can I get the raw query?
        }

我可以在 source code 中看到似乎没有任何东西可以揭露这一点?其他人有类似的问题吗?

最佳答案

我不知道您是如何构建查询的,但您可以将 SearchDescriptor 转换为 ISearchRequest 以获得更多详细信息。

var searchDescriptor = new SearchDescriptor<ElasticsearchProject>()
    .From(0)
    .Size(20)
    .Query(q => q.Match(m => m.OnField(f => f.Country).Query("Country")));

var query = ((ISearchRequest) searchDescriptor).Query.Match.Query;

Assert.AreEqual("Country", query);

关于c# - 访问 SearchDescriptor 属性以进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29239831/

相关文章:

visual-studio - 由于 FileNotFoundException、异常转换测试,NUnit VS Adapter 无法发现测试

c# - 使用 Moq 测试多线程情况会抛出奇怪的错误

c# - 如何在table1的指定列之后将table2中的列连接到table1?

mysql - 在 ElasticSearch 中保存用户搜索查询的最佳方式?

ElasticSearch::Exception 同时创建索引和文档

elasticsearch - Elasticsearch在日期范围上的聚合

c# - 如何将 CustomControl 属性绑定(bind)到控件本身?

c# - 如何统一创建一个基本的 ListView

asp.net-mvc - 我应该在 ASP.NET MVC3 项目中进行哪些单元测试?

asp.net - 来自 HtmlTextWriter 的测试输出