模拟扩展方法 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