这是我开发单元测试所遵循的方法。
我的项目正在使用实体框架进行测试,所以我在测试中模拟实体框架,在测试项目中创建内存数据(用于表)。
我的项目使用Mapper从vw_eemployees到User,方法如下。
configuration.CreateMap<vw_employees, User>().ForMember(m => m.Id, opt =>opt.MapFrom(u => u.ID)).ForMember(m => m.DisplayName, opt =>opt.MapFrom(u => u.FullName));
所以我想模拟上面的配置。CreateMap,这样我就可以从mocking中获得User对象。
public class User : IHaveCustomMappings
{
public string Id { get; set; }
public string DisplayName { get; set; }
public string Role { get; set; }
public string UserDomain { get; set; }
public long? bId { get; set; }
public void CreateMappings(IMapperConfiguration configuration)
{
try
{
configuration.CreateMap<vw_employees, User>().ForMember(m => m.Id, opt =>opt.MapFrom(u => u.ID)).ForMember(m => m.DisplayName, opt =>opt.MapFrom(u => u.FullName));
}
catch (AutoMapperConfigurationException ex)
{
throw;
}
}
}
在单元测试中,我试图用以下方式模拟映射器,但它不起作用。
var mappingservice = new Mock<IMapperConfiguration>();
var im = new User { Id = "1234", DisplayName = "abc", Role = null,UserDomain= "xyz", bid = null };
mappingservice.Setup(m => m.CreateMap<vw_employees, ApplicationUser>());
请帮助我,如何在测试时解决上面类的以下依赖项。
public void CreateMappings(IMapperConfiguration configuration)
{
try
{
configuration.CreateMap<vw_employees, User>().ForMember(m => m.Id, opt =>opt.MapFrom(u => u.ID)).ForMember(m => m.DisplayName, opt =>opt.MapFrom(u => u.FullName));
}
catch (AutoMapperConfigurationException ex)
{
throw;
}
}
不要模拟IMappingExpression。实际上,不要在AutoMapper中模拟任何。直接使用即可。在AutoMapper中模拟任何东西都不会增加任何值,我无法想象你为什么要模拟配置。