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

时间:2019-11-27 09:44:15

标签: unit-testing azure-cosmosdb xunit

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

模拟 xUnit测试
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 个答案:

答案 0 :(得分:0)

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

  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