问题描述
我正在尝试找到一种方法,用不同的参数对 SearchResults<T> Class
的搜索结果进行单元测试。
与之前的包 DocumentSearchResult<T> Class
中的 Microsoft.Azure.Search.Data v10.1.0
相比,SearchResults<T> Class
没有任何构造函数,只有属性和方法。
DocumentSearchResult<T> Class
https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.search.models.documentsearchresult-1?view=azure-dotnet
SearchResults<T> Class
https://docs.microsoft.com/en-us/dotnet/api/azure.search.documents.models.searchresults-1?view=azure-dotnet
我似乎无法在网上找到任何相关文档,因为它相对较新,但欢迎提出任何想法或建议。
谢谢。
解决方法
我们所有用于 .NET 匹配包名称 Azure.* 的 Azure SDK 像 Azure.Search.Documents 都可以使用与 here 所示相同的原则进行模拟。对于像 SearchResults<T>
这样的纯响应对象,我们创建 model factories 以便您可以创建它们进行测试。通常,除了测试之外,创建它们没有其他预期目的。
使用最小起订量,例如:
// Arrange
var mockResponse = new Mock<Response>();
var mockResults = SearchModelFactory.SearchResults<Model>(new[]
{
SearchModelFactory.SearchResult<Model>(new Model { Name = "a" },1.0),SearchModelFactory.SearchResult<Model>(new Model { Name = "b" },0.9),},2,rawResponse: response.Object);
var mockClient = new Mock<SearchClient>();
mockClient.Setup(m => m.Search<Model>(It.IsAny<string>(),It.IsAny<SearchOptions>(),default))
.Returns(Response.FromValue(mockResults,mockResponse.Object));
// Act
var response = mockClient.Object.Search<Model>("anything");
// Assert
Assert.AreEqual(2,response.Value.TotalCount);
有关其他想法,请参阅 more mocking samples。