我需要xUnit测试用例。 Microsoft.Azure.Cosmos容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要xUnit测试用例。 Microsoft.Azure.Cosmos容器相关的知识,希望对你有一定的参考价值。

我已使用Cosmosdb容器为其抽象类。我需要使用Moq库mockxUnit test

public class SmsTemplateRepository : ISmsTemplateRepository

    private Container _container;

    public SmsTemplateRepository(CosmosClient dbClient, string databaseName, string containerName) 
    
        _container = dbClient.GetContainer(databaseName, containerName);
    

    public IEnumerable<SmsTemplate> GetAll()
    
        return _container.GetItemLinqQueryable<SmsTemplate>(true);
    

    **public async Task InsertAsync(SmsTemplate smsTemplate)
    
        await _container.CreateItemAsync(smsTemplate);
    **

答案

您必须从传递到存储库构造函数的依赖项中模拟整个链。

  1. 创建要模拟GetAll返回的模板的列表:
var smsTemplates = new[]

  new SmsTemplate  Name = "Name1" ,
  new SmsTemplate  Name = "Name3" 
.AsQueryable()
 .OrderBy(x => x.Name);
  1. 创建模拟的CosmosClient和模拟的容器并设置CosmosClient模拟以返回模拟的容器:
var container = new Mock<Container>();
var client = new Mock<CosmosClient>();

client.Setup(x => x.GetContainer(It.IsAny<string>(), It.IsAny<string>())
      .Returns(container.Object);
  1. 设置模拟容器以返回模板列表,并将模拟的CosmosClient传递给存储库的构造函数:
container.Setup(x => x.GetItemLinqQueryable<SmsTemplate>(It.IsAny<bool>())
         .Returns(smsTemplates);
var repository = new SmsTemplateRepository(client.Object, ....);
  1. GetAll现在将返回smsTemplates

以上是关于我需要xUnit测试用例。 Microsoft.Azure.Cosmos容器的主要内容,如果未能解决你的问题,请参考以下文章

.NET周报 5月第2期 2023-05-14

xUnit 测试类内部

Truffle - 有没有办法自动生成测试用例?

如何在需要 UserManager 但使用内存数据库的 XUnit 中测试方法

如何使用 FluentAssertions 在 XUnit 中测试 MediatR 处理程序

如何使用FluentAssertions在XUnit中测试MediatR处理程序