在我的 A.CallTo FakeItEasy 方法中无法获得正确的参数

Can't get right parameters right in my A.CallTo FakeItEasy method

我正在尝试创建一个简单的测试来检查是否调用了 elasticsearch 客户端的搜索方法。

public async Task<IReadOnlyCollection<MyClass>> MySearch(string term)
    {
        var searchResponse = _elasticClient.Search<MyClass>(s => s
            .AllIndices()
            .Query(body => body
                .MultiMatch(m => m
                    .Query(term))));

        return searchResponse.Documents;
    }

这是测试:

[Fact]                                                                                           
public async Task MyTest()          
{                                                                                                
    await _searchAgent.MySearch(_term);                                            

    A.CallTo(() => _elasticClient.Search<MyClass(A<ISearchRequest>._))
            .MustHaveHappened();                                                                     
 }                                                                                            

我不太明白这里的错误信息。看起来 A.CallTo 方法中的参数有问题,但我想我忽略了 A<ISearchRequest>._ ?

的输入
FakeItEasy.ExpectationException : 

Assertion failed for the following call:

Nest.IElasticClient.Search`1[RiksTV.Api.ContentSearch.Model.ContentSearchTitle](request: <Ignored>)
Expected to find it once or more but didn't find it among the calls:
1: Nest.IElasticClient.Search`1[RiksTV.Api.ContentSearch.Model.ContentSearchTitle](selector: System.Func`2[Nest.SearchDescriptor`1[RiksTV.Api.ContentSearch.Model.ContentSearchTitle],Nest.ISearchRequest])

您实际上是在 ElasticClient

上使用此方法
ISearchResponse<TDocument> Search<TDocument>(
      Func<SearchDescriptor<TDocument>, ISearchRequest> selector = null)
      where TDocument : class

不是

ISearchResponse<TDocument> Search<TDocument>(ISearchRequest request) where TDocument : class;

所以您需要将 A.CallTo(..) 稍微更改为

A.CallTo(() => elasticClient.Search(A<Func<SearchDescriptor<MyClass>, ISearchRequest>>._))
    .MustHaveHappened();

希望对您有所帮助。