NEST 中的模拟 Elasticsearch 客户端存在异步搜索方法问题
Posted
技术标签:
【中文标题】NEST 中的模拟 Elasticsearch 客户端存在异步搜索方法问题【英文标题】:Mock Elasticsearch client in NEST having problem with async search method 【发布时间】:2018-11-29 16:31:04 【问题描述】:我正在使用 NEST 框架在 c# 中进行弹性搜索查询。
我正在用 Moq 编写一个简单的单元测试。
mockElasticClient.Setup(ec => ec.SearchAsync(
It.IsAny<Func<SearchDescriptor<Relativity>,
SearchDescriptor<Relativity>>>()))
.ReturnsAsync(mockSearchResponse.Object);
以上代码抛出'An expression tree may not contain a call or invocation that uses optional arguments'
如果我使用 Search 而不是 SearchAsync,上面的代码就可以工作。
我在这里做错了什么?
【问题讨论】:
***.com/questions/12413583/… 您必须手动传递具有默认值的参数。 谢谢。它真的帮助了我。 在下面这种情况下如何进行模拟,有人可以在这里帮助我吗,我也面临同样的问题。 ISearchResponse应考虑模拟函数中的所有参数。在这种情况下,从函数定义开始
//
// Parameters:
// selector:
// A descriptor that describes the parameters for the search operation
//
// Type parameters:
// T:
// The type used to infer the index and typename as well describe the query strongly
// typed
Task<ISearchResponse<T>> SearchAsync<T>(Func<SearchDescriptor<T>, ISearchRequest> selector = null, CancellationToken cancellationToken = default) where T : class;
有两个参数 Func
模拟要求 CancellationToken 如下所示进行模拟
mockElasticClient.Setup(x => x
.SearchAsync(It.IsAny<Func<SearchDescriptor<Relativity>, ISearchRequest>>(),It.IsAny<CancellationToken>()))
.ReturnsAsync(mockSearchResponse.Object);
【讨论】:
以上是关于NEST 中的模拟 Elasticsearch 客户端存在异步搜索方法问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NEST 更新 ElasticSearch 索引中的现有文档?
使用 C# 中的 NEST 库调用 elasticsearch 时,如何向 linq 语句添加条件逻辑?
如何在 NEST2 中更新 Elasticsearch 文档