【问题标题】:How Moq UnitOfWork with IQueryableMoq UnitOfWork 如何使用 IQueryable
【发布时间】:2022-01-28 08:01:43
【问题描述】:

我有方法

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() 中的问题...如何正确模拟存储库?

【问题讨论】:

    标签: c# .net unit-testing nunit


    【解决方案1】:

    帮帮我=> 使用使用 MockQueryable.Moq;

    repository.Setup(x => x.AsQueryable()).Returns(roadmaps.AsQueryable().BuildMock().Object);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2012-10-15
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多