i have method
public async Task<Map[]> GetMapsById(int id, CancellationToken cancellationToken)
{
return await this.unitOfWork.Maps
.AsQueryable()
.Where(map => map.Id == id)
.ToArrayAsync(cancellationToken);
}
and i try create tests
[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);
}
} and i try create test i am add mock of repository Map to unit of work and then create provider
[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);
}
when i start test i see error
System.InvalidOperationException : The source 'IQueryable' doesn't implement 'IAsyncEnumerable<Models.Map>'. Only sources that implement 'IAsyncEnumerable' can be used for Entity Framework asynchronous operations.
i think problem in SetupEntity()...how correct mock repository?
for me help=> using using MockQueryable.Moq;
repository.Setup(x => x.AsQueryable()).Returns(roadmaps.AsQueryable().BuildMock().Object);