我想对调用服务的另一个返回
IAsyncEnumerable<T>
方法的方法进行单元测试。
我已创建了服务的模拟 Mock<MyService>
,并希望设置此模拟,但我不知道如何做到。这可能吗?还有其他方法可以对调用返回 IAsyncEnumerable
的方法进行单元测试吗?public async Task<List<String>> MyMethodIWantToTest()
{
var results = new List<string>();
await foreach(var item in _myService.CallSomethingReturningAsyncStream())
{
results.Add(item);
}
return results;
}
IAsyncEnumerable
的实现,可以通过编写异步迭代器方法来完成,并使用您的模拟框架提供的任何方法将其连接到模拟中。为了简化测试,如果方法的异步性对测试没有重要性,您还可以使用System.Linq.Async
包的Enumerable.ToAsyncEnumerable()
扩展方法来使用任何旧的常规可枚举对象(如数组)。 - Jeroen MostertIAsyncEnumerable<T>
,例如:async IAsyncEnumerable<T> ToAsyncEnumerable<T>(IEnumerable<T> inp) { foreach(var item in inp) yield return item; }
- Panagiotis Kanavos