c# - NSubstitute 中多次调用的不同返回值
问题描述
我模拟了一个迭代器并将其设置为返回多个值。第一次调用它应该返回 true,第二次调用它应该返回 false。
我以此作为参考:https ://nsubstitute.github.io/help/multiple-returns/
var iterator = Substitute.For<FeedIterator<Product>>();
iterator.HasMoreResults.Returns(true, false);
但是当我运行测试时,返回值总是假的。如果我切换参数返回值始终为真。
看起来这个序列不起作用,或者我错过了什么?
根据要求进行测试:
[Fact]
public async void GetAll_ReturnsProducts()
{
//arrange
var product = new Product();
var container = Substitute.For<Container>();
var cosmosLinqQuery = Substitute.For<ICosmosLinqQuery>();
var iterator = Substitute.For<FeedIterator<Product>>();
var feedResponse = Substitute.For<FeedResponse<Product>>();
//var enumerator = Substitute.For<IEnumerator<Product>>();
cosmosLinqQuery.GetFeedIterator<Product>(default).ReturnsForAnyArgs(iterator);
container.GetItemLinqQueryable<Product>().Returns(new List<Product>().AsQueryable());
IProductRepository productRepository = new ProductRepository(container, cosmosLinqQuery);
iterator.HasMoreResults.Returns(false, false, true);
//feedResponse.GetEnumerator().Returns(enumerator);
iterator.ReadNextAsync().Returns(feedResponse);
//act
var products = await productRepository.GetAll();
//assert
Assert.Same(product, products.First());
}
以及被测试的方法:
async Task<IList<Product>> IProductRepository.GetAll()
{
var query = (from p in container.GetItemLinqQueryable<Product>()
select p);
var iterator = cosmosLinqQuery.GetFeedIterator(query);
var products = new List<Product>();
while(iterator.HasMoreResults)
{
foreach(var item in await iterator.ReadNextAsync())
{
products.Add(item);
}
}
return products;
}
解决方案
推荐阅读
- angular - 在目标路由保护中重定向时如何停止双重 canDeactivate 调用?
- ios - 如何创建一个我可以在 SwiftUI 中更新的单例
- c++ - gRPC SSL 客户端 Windows 32 位 C++ 应用程序崩溃,错误整数除以零
- laravel - 我的 app-admin.blade.php 试图从非对象中获取“全名”属性
- reactjs - react-router-keycloak 是否支持 PKCE?
- modulo - 模块 ishi 横幅块
- python - tkinter- 将条目小部件值传递给另一个类
- c# - 正则表达式仅允许 C# 中的一位数或两位数和逗号
- javascript - 选择选项值属性可以是变量吗?
- scala - Spark Scala EMR 作业因 org.apache.spark.shuffle.FetchFailedException 而失败