如何模拟ElasticSearch NEST的GetAsync?

问题描述 投票:0回答:1

我试图用以下方法从我的ElasticSearch实例中获取一个文档 GetAsync. 我的做法是这样的

var document= await client.GetAsync<MyDocument>("documentId");
return document.Source;

我想在单元测试中模拟这个调用。我试过这样做

[Fact]
public async Task TestGetDocument_ExpectSuccess()
{
    var mockDocument = new Mock<IGetResponse<MyDocument>>(MockBehavior.Strict);
        mockDocument
            .Setup(r => r.Source)
            .Returns(_myDocument);
    var mockClient = new Mock<IElasticClient>(MockBehavior.Strict);
        mockClient
            .Setup(client => client.GetAsync(
                _documentId,
                It.IsAny<Func<GetDescriptor<MyDocument>, IGetRequest>>(),
                It.IsAny<CancellationToken>()))
            .ReturnsAsync(mockDocument.Object);
    // ...
}

但当我这样做的时候,实例化的 mockClient 给出这个错误

'ISetup<IElasticClient, Task<GetResponse<MyDocument>>>' does not contain a definition for 'ReturnsAsync' and the best extension method overload 'SequenceExtensions.ReturnsAsync<IGetResponse<MyDocument>>(ISetupSequentialResult<Task<IGetResponse<MyDocument>>>, IGetResponse<MyDocument>)' requires a receiver of type 'ISetupSequentialResult<Task<IGetResponse<MyDocument>>>' [Foo.Bar.ElasticSearch.UnitTests]csharp(CS1929)

我很困惑的是 SequenceExtensions 位,因为我没有使用错误中的 SetupSequence (如果这是指的是什么)。我试着改变了 responseMockGetResponse<ElasticHitContainer>摆脱了编译错误,但现在我无法正确地模拟出 Source 因为我没有使用接口。

有谁知道如何解决这个问题?

c# moq nest
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.