模拟弹性客户端调用

时间:2017-02-26 20:50:05

标签: c# moq nest

我正在尝试Moq调用弹性客户端,但它不起作用。

我通过通用repo.Update(T doc)进行了此调用:

var response = await _client.UpdateAsync(DocumentPath<T>.Id(doc),
     d => d
       .Upsert(doc)
       .Script(.....)
);

在我的测试中,我想验证是否使用这些特定输入调用UpdateAsync

我尝试了以下无效的方法:

_mock = new Mock<IElasticClient>();

Func<UpdateDescriptor<Document,Document>, 
    IUpdateRequest<Document,Document>> sel = d => d.Upsert(doc).Script(....);

await repo.Update(document)

_mock.Verify(c => c.UpdateAsync<Document>(
     It.Is<DocumentPath<Document>(
        docPath => docPath == DocumentPath<Document>.Id(document),
     It.Is<Func<...>(s => s == sel),
     it.IsAny<CancellationToken>()
);

1 个答案:

答案 0 :(得分:1)

我认为您在首次验证条件时遇到问题:

docPath => docPath == DocumentPath<Document>.Id(document)

正如您在NEST source code中看到的那样,DocumentPath类不会重载==运算符 - 它会检查引用相等性。 DocumentPath.Id(document)创建新对象,因此条件始终为false。

希望有所帮助。