我正在为我的应用程序编写一个数据访问层,并尝试模拟 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);
}
}
我尝试模拟这样的依赖关系(简化):
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);
查看 AzureCosmosDB SDK 文档,似乎有一个用于模拟的 FeedResponse 构造函数,它采用 IEnumerable 作为参数,但 NSubstitute 抱怨告诉我,当我尝试传入要使用的列表时,它找不到此构造函数。有没有一种替代方案可以将一些 IEnumerable 作为 FeedResponse 提供?我哪里出错了?
慕尼黑的夜晚无繁华
茅侃侃
有只小跳蛙