我正在尝试通过存储库(包括AutoMapper的使用)测试从ASP.NET Core Controller到数据库的路径。
这是我的存储库:
using System;
using System.Linq;
using AutoMapper;
using DS.DTO.MasterData;
using DS.Utilities.DSExceptions;
using Microsoft.Extensions.Logging;
using Omu.ValueInjecter;
namespace DS.MasterData.Repositories
{
public class PersonFactRepository : IPersonFactRepository
{
private readonly Database.MasterDataContext dbContext;
private readonly ILogger<PersonFactRepository> logger;
private readonly IMapper mapper;
public PersonFactRepository(ILogger<PersonFactRepository> logger, Database.MasterDataContext dbcontext, IMapper mapper)
{
this.dbContext = dbcontext;
this.mapper = mapper;
this.logger = logger;
}
public PatientDto CreatePatient(CreatePatientDto inModel)
{
var dbPersonDim = mapper.Map<CreatePatientDto, Database.PersonDim>(inModel);
var dbAddressDim = mapper.Map<CreatePatientDto, Database.AddressDim>(inModel);
var dbPhoneDim = mapper.Map<CreatePatientDto, Database.PhoneDim>(inModel);
var dbPersonFact = new Database.PersonFact { FactId = Guid.NewGuid() };
dbPersonDim.PersonFact = dbPersonFact;
dbAddressDim.PersonFact = dbPersonFact;
dbPhoneDim.PersonFact = dbPersonFact;
dbPersonDim.InitDates();
dbAddressDim.InitDates();
dbPhoneDim.InitDates();
dbContext.SaveChanges();
var returnVal = new PatientDto();
returnVal.InjectFrom(dbPersonDim)
.InjectFrom(dbAddressDim)
.InjectFrom(dbPhoneDim);
return returnVal;
}
}
}
我的AutoMapper配置:
public class AutoMapperConfig : Profile
{
public AutoMapperConfig()
{
CreateMap<CreatePatientDto, Database.PersonDim>(MemberList.None).ReverseMap();
CreateMap<CreatePatientDto, Database.AddressDim>(MemberList.None).ReverseMap();
CreateMap<CreatePatientDto, Database.PhoneDim>(MemberList.None).ReverseMap();
}
}
我的问题是如何将我的Mapper配置放入我的fakeMapper中?
var inMemDB = Fakes.FakeDB.DB;
var loggerCntl = Substitute.For<ILogger<Controllers.PatientController>>();
var loggerPersonFactRepo = Substitute.For<ILogger<Repositories.PersonFactRepository>>();
AutoMapper.IMapper fakeMapper = ????
var personRepo = new PersonFactRepository(loggerPersonFactRepo, inMemDB, fakeMapper);
我打算进行集成测试,因为我希望测试能够将数据发布到控制器,并测试正确的数据是否出现在正确的表中。
答案 0 :(得分:0)
创建映射器提供程序
public class MapperProvider
{
public MapperProvider() {
}
public MapperConfiguration GetMapperConfig()
{
var mce = new MapperConfigurationExpression();
mce.AddProfile<AutoMapperConfig>();
var mc = new MapperConfiguration(mce);
return mc;
}
}
注册映射配置
AutoMapper.IMapper fakeMapper = new Mapper(new
MapperProvider().GetMapperConfig());