The signature of the Func<T1, T2>
passed to It.IsAny<T>()
is not correct so the setup expectation will never be matched. The signature should be
It.IsAny<Func<SearchDescriptor<Person>, ISearchRequest>>()
A full working example
void Main()
{
var people = new List<Person>
{
new Person { Id = 1 },
new Person { Id = 2 },
};
var mockSearchResponse = new Mock<ISearchResponse<Person>>();
mockSearchResponse.Setup(x => x.Documents).Returns(people);
var mockElasticClient = new Mock<IElasticClient>();
mockElasticClient.Setup(x => x
.Search(It.IsAny<Func<SearchDescriptor<Person>, ISearchRequest>>()))
.Returns(mockSearchResponse.Object);
var result = mockElasticClient.Object.Search<Person>(s => s);
Assert.AreEqual(2, result.Documents.Count()).Dump();
}
public class Person
{
public int Id { get; set;}
}
If you don't need to stub the client then you can simply use a real client and set the IConnection
to an instance of InMemoryConnection
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
// pass an instance of InMemoryConnection so that requests are not
// **actually** sent
var connectionSettings = new ConnectionSettings(pool, new InMemoryConnection())
.PrettyJson()
.DisableDirectStreaming()
.OnRequestCompleted(response =>
{
// log out the request
if (response.RequestBodyInBytes != null)
{
Console.WriteLine(
$"{response.HttpMethod} {response.Uri}
" +
$"{Encoding.UTF8.GetString(response.RequestBodyInBytes)}");
}
else
{
Console.WriteLine($"{response.HttpMethod} {response.Uri}");
}
// log out the response
if (response.ResponseBodyInBytes != null)
{
Console.WriteLine($"Status: {response.HttpStatusCode}
" +
$"{Encoding.UTF8.GetString(response.ResponseBodyInBytes)}
" +
$"{new string('-', 30)}
");
}
else
{
Console.WriteLine($"Status: {response.HttpStatusCode}
" +
$"{new string('-', 30)}
");
}
});
var client = new ElasticClient(connectionSettings);
This way you could also capture the requests if you needed to. You could take this a step further and create your own IConnection
implementation that returns stub responses.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…