首页 > 解决方案 > 使用 ISearchIndexClient 进行测试

问题描述

我想测试我的功能。它们都依赖于ISearchIndexClient. 我试图创建一个Mock<ISearchIndexClient>但我不能使用它,因为模拟不被接受ISearchIndexClient

在我的函数中,我正在调用

DocumentSearchResult<SearchData> result = 
                           await client.Documents.SearchAsync<SearchData>(searchText, sp);

然后,我尝试将我的自定义客户端创建为

public class CustomSearchIndexClient : ISearchIndexClient { }

public class CustomDocumentsOperations : IDocumentsOperations { }

但我不能覆盖SearchAsync<T>.

如何测试我的功能?谢谢

标签: c#unit-testingazure-cognitive-search

解决方案


SearchAsync是一种难以模拟的扩展方法。如果您可以检查源代码并找出扩展方法正在调用的实例成员,您可以模拟它,但这对于简单的测试来说是很多工作

我建议抽象出这种紧密耦合的依赖关系,以便您的函数更易于测试。

将 azure 特定代码包装在您控制的抽象后面,仅公开所需的功能,这应该使您可以更灵活地模拟外部依赖项,以便在测试时正确行使您的功能,


推荐阅读