模拟扩展方法 IElasticClient
Mock extension methods IElasticClient
有没有办法模拟以下内容
var result = await Client.SearchAsync<IndexedSite>(d => d
.Index(SiteIndexName)
.Query(q => q.MatchAll())
.Sort(sd => sd.Field(s => s.Name, SortOrder.Ascending))
.Take(c_maxSiteListSize));
在这种情况下会使用 .Callbacks 吗?
我当前的设置:
private Mock<IElasticClient> _client = new Mock<IElasticClient>();
private Mock<ISearchResponse<IndexedSite>> indexedSite = new Mock<ISearchResponse<IndexedSite>>();
_client.Setup(x =>
x.SearchAsync<IndexedSite>(It.IsAny<Func<SearchDescriptor<IndexedSite>, ISearchRequest>>(),
default(CancellationToken))).Returns(Task.FromResult(indexedSite.Object));
这有效,它确实 return indexedSite,但是它没有 'Cover' .Index/.Query/.Sort/.Take 扩展方法,这正是我想要的。
根据@Olegl 的回答。模拟扩展方法是不可能的。您需要重构并摆脱扩展方法以使其可测试
更多信息here
有没有办法模拟以下内容
var result = await Client.SearchAsync<IndexedSite>(d => d
.Index(SiteIndexName)
.Query(q => q.MatchAll())
.Sort(sd => sd.Field(s => s.Name, SortOrder.Ascending))
.Take(c_maxSiteListSize));
在这种情况下会使用 .Callbacks 吗?
我当前的设置:
private Mock<IElasticClient> _client = new Mock<IElasticClient>();
private Mock<ISearchResponse<IndexedSite>> indexedSite = new Mock<ISearchResponse<IndexedSite>>();
_client.Setup(x =>
x.SearchAsync<IndexedSite>(It.IsAny<Func<SearchDescriptor<IndexedSite>, ISearchRequest>>(),
default(CancellationToken))).Returns(Task.FromResult(indexedSite.Object));
这有效,它确实 return indexedSite,但是它没有 'Cover' .Index/.Query/.Sort/.Take 扩展方法,这正是我想要的。
根据@Olegl 的回答。模拟扩展方法是不可能的。您需要重构并摆脱扩展方法以使其可测试
更多信息here