首页 > 解决方案 > 在 XUnit 测试中,设置一个 MOCK 方法并将其转换为 ToListAsync()

问题描述

我正在尝试测试我的 Manager,它接受unitOfWorkIMapperctor 参数,我在其中为它们创建了模拟实例,但我遇到了一些问题:无法设置我的GetNoTracking模拟方法

我的经理:

public StreetManagerBase(IUnitOfWork unitOfWork, IMapper mapper)
{
    _mapper = mapper;
    _unitOfWork = unitOfWork;
}

public async Task<List<StreetResponse>> GetStreets(string name, int cityVillageId)
{
    name = name.ToUpper();
    name = name.Trim();

    List<Street> streets = await _unitOfWork.StreetRepositoryBase.GetNoTracking().Include(x => x.CityVillage).Where(x => x.CityVillageId == cityVillageId && x.Name.Contains(name)).ToListAsync();

    List<StreetResponse> response = _mapper.Map<List<StreetResponse>>(streets);

    return response;

}
public virtual IQueryable<T> GetNoTracking(params string[] includes)
{
    IQueryable<T> set = _dbContext.Set<T>();

    for (int i = 0; i < includes.Length; i++)
    {
        set = set.Include(includes[i]);
    }

    return set.AsNoTracking();
} 

运行时错误 => 您不能在设置中使用 TOLIST 以及 TOLISTASYNC();

[Fact]
public async Task SampleTest2()
{
    using AutoMock mock = AutoMock.GetLoose();
    Mock<IUnitOfWork> mockUnitOfWork = new Mock<IUnitOfWork>();
    Mock<IMapper> mockMapper = new Mock<IMapper>();

    mockUnitOfWork.Setup(x => x.StreetRepositoryBase.GetNoTracking().ToList()).Returns(ListOfStreetMock());

    List<StreetResponse> temp = new();
    mockMapper.Setup(x => x.Map<List<StreetResponse>>(ListOfStreetMock())).Returns(temp);

    StreetManagerBase manager = new StreetManagerBase(mockUnitOfWork.Object, mockMapper.Object);
    List<StreetResponse> actual = await manager.GetStreets("test", 1);
    Assert.Equal(temp.Count, actual.Count);

}  

创建街道模拟数据列表

public List<Street> ListOfStreetMock()
{
    List<Street> temp = new List<Street>
    {
        new Street
        {
            Id=1,
            CityVillageId=1,
            Name="test",
            
            CityVillage=new CityVillage
            {
                Districts =null,
                Name="test",
                Id=1
            }

        }
    };
    return temp;
}  

标签: c#entity-framework-coremoqrepository-patternxunit

解决方案


推荐阅读