小编Sin*_*Sin的帖子

如何在 CosmosSDK v3+ 的 FeedResponse 中提供模拟值?

我正在为我的应用程序编写数据访问层,并尝试模拟 CosmosDB SDK 依赖项以进行单元测试。我将 NUnit 与 NSubstitute 一起使用,并遇到了我试图模拟 Container.GetItemQueryIterator 的返回值的问题。

我已经成功地提供了一个模拟 feedIterator 作为该调用的响应和一个模拟 feedResponse 作为 feedIterator.ReadNextAsync 的返回值,但我无法弄清楚如何将任何类型的值注入 FeedResponse 以进行测试

我要测试的代码如下所示:

var feedIterator = container.GetItemQueryIterator<T>(queryDefinition);

  while (feedIterator.HasMoreResults){
    result.success = true;

    foreach (var item in await feedIterator.ReadNextAsync()){
      list.Add(item);
    }
  }
Run Code Online (Sandbox Code Playgroud)

我试图模拟这样的依赖项(简化):

this.mockFeedResponse = Substitute.For<FeedResponse<T>>(this.mockApplicationList);         
this.mockFeedIterator = Substitute.For<FeedIterator<T>>();
this.mockFeedIterator.ReadNextAsync().ReturnsForAnyArgs(Task.FromResult(this.mockFeedResponse));
this.mockFeedIterator.HasMoreResults.Returns(true);
Run Code Online (Sandbox Code Playgroud)

查看 AzureCosmosDB SDK 文档,似乎有一个用于模拟的 FeedResponse 构造函数,它将 IEnumerable 作为参数,但是 NSubstitute 抱怨告诉我,当我尝试传入要使用的列表时,它找不到这个构造函数。有没有替代方法可以将一些 IEnumerable 作为 FeedResponse 提供?我哪里错了?

c# nsubstitute azure-cosmosdb

5
推荐指数
2
解决办法
1934
查看次数

标签 统计

azure-cosmosdb ×1

c# ×1

nsubstitute ×1