如何解决NSubstitute:无法为 IMapperBase.Map 返回 Task`1 类型的值预期类型 List`1
我写了一个单元测试,在测试中我想测试我的 CashCapitalService
。
在我的服务中,我使用 AutoMapper
将我的模型映射到 dto 和反向。
我的服务是:
public class CashCapitalService : ICashCapitalService
{
private readonly IUnitOfWork _unitOfWork;
private readonly IMapper _mapper;
public CashCapitalService(IUnitOfWork unitOfWork,IMapper mapper)
{
_unitOfWork = unitOfWork;
_mapper = mapper;
}
public async Task<List<CashCapitalInsertAndUpdateDto>> GetAllAsync()
{
var allAsync = await _unitOfWork.CashCapitalRepository.GetAllAsync();
List<CashCapitalInsertAndUpdateDto> cashCapitalInsertAndUpdateDtos = _mapper.Map<List<CashCapitalInsertAndUpdateDto>>(source:allAsync);
return cashCapitalInsertAndUpdateDtos;
}
}
public class CashCapitalService : ICashCapitalService
{
private readonly IUnitOfWork _unitOfWork;
private readonly IMapper _mapper;
public CashCapitalService(IUnitOfWork unitOfWork,IMapper mapper)
{
_unitOfWork = unitOfWork;
_mapper = mapper;
}
public async Task<List<CashCapitalInsertAndUpdateDto>> GetAllAsync()
{
var allAsync = await _unitOfWork.CashCapitalRepository.GetAllAsync();
List<CashCapitalInsertAndUpdateDto> cashCapitalInsertAndUpdateDtos = _mapper.Map<List<CashCapitalInsertAndUpdateDto>>(source:allAsync);
return cashCapitalInsertAndUpdateDtos;
}
}
如您所见,Automapper 配置文件是:
public class CashCapitalInsertDtoProfile : Profile
{
public CashCapitalInsertDtoProfile()
{
CreateMap<CashCapitalInsertAndUpdateDto,CashCapital>().ReverseMap();
}
}
在我的单元测试中:
public class CashCapitalServiceTest
{
private readonly CashCapitalService _cashCapitalService;
private readonly IUnitOfWork _unitOfWork;
private readonly IMapper _mapper;
public CashCapitalServicetest()
{
_unitOfWork = Substitute.For<IUnitOfWork>();
_mapper = Substitute.For<IMapper>();
_cashCapitalService = new CashCapitalService(_unitOfWork,_mapper);
}
[Fact]
public async Task GetAllAsync_Should_GetAllCashCapital()
{
//Arrange
_unitOfWork.CashCapitalRepository.GetAllAsync().Returns(new List<CashCapital>());
var cashCapitals = new List<CashCapital>()
{
new CashCapital()
{
InsertDateTime = DateTime.Now,AmountRial = 250000000,Description = "tv,a lj,v"
}
};
var cashCapitalInsertAndUpdateDtos = new List<CashCapitalInsertAndUpdateDto>()
{
new CashCapitalInsertAndUpdateDto()
{
AmountRial = 250000000,v"
}
};
//var returnValue = _mapper.Map(Arg.Any<List<CashCapital>>(),Arg.Any<List<CashCapitalInsertAndUpdateDto>>());
//_cashCapitalService.GetAllAsync().Returns(returnValue);
_mapper.Map(cashCapitals,cashCapitalInsertAndUpdateDtos).Returns(new List<CashCapitalInsertAndUpdateDto>()
{
new CashCapitalInsertAndUpdateDto()
{
AmountRial = 250000000,v"
}
});
var resultValue = _mapper.Map(cashCapitals,cashCapitalInsertAndUpdateDtos);
_cashCapitalService.GetAllAsync().ReturnsForAnyArgs(resultValue);
//Act
var all = await _cashCapitalService.GetAllAsync();
//Assert
all.Should().BeOfType<List<CashCapitalInsertAndUpdateDto>>();
await _unitOfWork.CashCapitalRepository.Received(1).GetAllAsync();
}
}
留言:
NSubstitute.Exceptions.CouldNotSetReturnDuetoTypeMismatchException:无法返回 Task1 for IMapperBase.Map (expected type List
1 类型的值。
我是单元测试和 NSubstitute 库的新手,我不知道如何模拟 AutoMapper。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。