r3p*_*ica 1 c# nunit unit-testing entity-framework moq
我正在尝试测试我拥有的一些代码:
public async Task<Sortation> SaveAsync(Sortation sortation)
{
if (sortation.Id == 0)
{
var sortations = await ListAsync(sortation.CategoryId);
sortation.Order = sortations.Count;
_sortationService.Create(sortation);
}
else
{
_sortationService.Update(sortation);
}
await _sortationService.SaveChangesAsync();
return sortation;
}
Run Code Online (Sandbox Code Playgroud)
ListAsync方法给我带来了一个问题。我这样设置我的测试:
[Test]
public async Task ShouldHaveOrderOfZero()
{
// Assemble
const string categoryId = "cameras";
var services = SortationContext.GivenServices();
var sortationProvider = services.WhenGetSortationProvider();
var sortations = new List<Sortation>();
var sortation = new Sortation { CategoryId = categoryId };
services.MockSortationService.Setup(x => x.List()).Returns(sortations.AsQueryable);
// Act
await sortationProvider.SaveAsync(sortation);
// Assert
sortation.Order.Should().Be(0);
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我收到此错误:
消息:System.InvalidOperationException:源 IQueryable 未实现 IDbAsyncEnumerable。只有实现 IDbAsyncEnumerable 的源才能用于实体框架异步操作。
据此:只有实现 IAsyncEnumerable 的源才能用于实体框架异步操作我需要将 EF 添加到我的 UnitTest 项目中,我就是这么做的。但错误仍然存在。
ListAsync方法如下所示:
public async Task<List<Sortation>> ListAsync(string categoryId, params string[] includes) =>
await _sortationService.List(includes).Where(m => m.CategoryId.Equals(categoryId)).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎样才能阻止这个错误的发生?
小智 9
就我而言,异常是由于使用错误的 ToListAsync 扩展引起的。
它来自:
使用 System.Data.Entity;代替
使用 Microsoft.EntityFrameworkCore;更改命名空间修复了错误。
| 归档时间: |
|
| 查看次数: |
4854 次 |
| 最近记录: |