如何模拟IMappingExpression <tsource,tdestination =“”> CreateMap <tsource,tdestination =“”>();

时间:2016-07-19 10:17:22

标签: c# unit-testing automapper

这是我为开发单元测试所遵循的方法。

我的项目正在使用Entity Framework进行测试,所以 我在我的测试中模拟实体框架工作,我在测试项目中创建内存数据(用于表)。

我的项目使用Mapper从vw_employees到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,这样我就可以从模拟中获取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;
        }
    }

1 个答案:

答案 0 :(得分:1)

不要模拟IMappingExpression。实际上,不要在AutoMapper中模拟任何。只需直接使用它。在AutoMapper中模拟任何东西都不会添加任何值,我无法想象你为什么要模拟配置