Moq UnitOfWork如何使用IQueryable



我有方法

public async Task<Map[]> GetMapsById(int id, CancellationToken cancellationToken)
{
return await this.unitOfWork.Maps
.AsQueryable()
.Where(map => map.Id == id)
.ToArrayAsync(cancellationToken);
}

我尝试创建测试

[TestFixture]
public class LocalMapsTests
{
private Mock<IUnitOfWork> UnitOfWorkMock;
[SetUp]
public void SetUp()
{
this.mockRepository = new MockRepository(MockBehavior.Strict);
this.cancellationToken = CancellationToken.None;
this.UnitOfWorkMock= this.mockRepository.Create<IUnitOfWork>();

}
private LocalMapsTests CreateProvider()
{
return new LocalMaps(this.mockUnitOfWork.Object);
}
private void SetupEntity()
{
var maps = new List<Map>
{
new Map
{
Id = 100
}
};
var repository = new Mock<IRepository<Map>>();
repository.Setup(x => x.AsQueryable()).Returns(maps.AsQueryable());
this.mockUnitOfWork
.Setup(x => x.Maps)
.Returns(repository.Object);
}

}我尝试创建测试我将模拟存储库映射添加到工作单元,然后创建提供者

[Test]
public async Task GetMapsById_ShouldReturn_Maps()
{
// Arrange
this.SetupEntity();
LocalMapsProvider provider = this.CreateProvider();
// Act
var act = await provider.GetMapsById(100,this.cancellationToken);
// Assert
act.Should().BeOfType<Maps>();
Assert.NotNull(act);

}

当我开始测试时,我看到错误

System.InvalidOperationException:源"IQueryable"没有实现"IAsyncEnumerable<模型。映射>'。仅实现的源"IAsyncEnumerable"可用于实体框架异步操作。

我认为SetupEntity((中有问题。。。mock存储库的正确性如何?

帮助=>使用MockQueryable.Moq;

repository.Setup(x=>x.AsQueryable(((。返回(路线图.AsQueryable(((.BuildMock((.Object(;

最新更新