我试图用以下方法从我的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
(如果这是指的是什么)。我试着改变了 responseMock
拟 GetResponse<ElasticHitContainer>
摆脱了编译错误,但现在我无法正确地模拟出 Source
因为我没有使用接口。
有谁知道如何解决这个问题?