c# - 你如何模拟 IAsyncEnumerable?
问题描述
我想对一个调用另一个服务方法的方法进行单元测试,该方法返回一个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;
}
解决方案
正如 Jeroen 建议的那样,我建议使用ToAsyncEnumerable
from 。System.Linq.Async
看起来你正在使用 Moq,所以这看起来像:
async Task MyTest()
{
var mock = new Mock<MyService>();
var mockData = new[] { "first", "second" };
mock.Setup(x => x.CallSomethingReturningAsyncStream()).Returns(mockData.ToAsyncEnumerable());
var sut = new SystemUnderTest(mock.Object);
var result = await sut.MyMethodIWantToTest();
// TODO: verify `result`
}
推荐阅读
- r - 可变长度不同
- scala - 如何从一个序列中创建两个序列,将一个自定义对象与该序列中的另一个进行比较?
- docker - 如何通过 docker 让 bash shell 访问 vernemq 映像?
- mysql - 如何获取存储在数据库中的资源的 URL
- xcode - MacOS xcrun 错误阻止调用 shell 脚本
- google-cloud-platform - Cloud SQL 从存储桶导入数据
- wordpress - 调整 WooCommerce 添加到购物车短代码的参数不起作用
- flutter - 你可以在 Flutter 中多次调用 Firestore.instance 吗?
- ios - 如何让一个 Sprite 成为另一个 Sprite 的障碍?
- laravel - MySql phpmyadmin 表到 Laravel 迁移文件