模拟扩展方法IElasticClient

时间:2018-12-10 12:43:40

标签: c# .net moq dotcover

有没有办法模仿以下内容

        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));

在这种情况下会使用.callback吗?

我当前的设置:

    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));

这有效,并且确实返回indexedSite,但是它没有“覆盖” .Index / .Query / .Sort / .Take扩展方法,这正是我想要的。

1 个答案:

答案 0 :(得分:0)

每个@Olegl答案。模拟扩展方法是不可能的。您需要重构并摆脱扩展方法以使其可测试

更多信息here