05.AutoMapper 之配置验证(Configuration Validation)
https://www.jianshu.com/p/5901a5d1ef15
配置验证(Configuration Validation)
手写映射配置代码虽然繁琐,但具有可测试的优点。AutoMapper
背后的设计灵感之一是不仅消除了自定义映射代码,而且消除了手动测试的需要。由于从源到目标的映射是基于约定的,因此您仍需要测试配置。
AutoMapper
以AssertConfigurationIsValid
方法的形式提供配置测试。 假设我们的源和目标类型有错误配置:
public class Source
{
public int SomeValue { get; set; }
}
public class Destination
{
public int SomeValuefff { get; set; }
}
在目标类型中我们可能手抖打错了目标属性名或者重命名了源类型的属性名。要测试配置,只需创建一个单元测试来设置配置并执行AssertConfigurationIsValid
方法:
Mapper.Initialize(cfg =>
cfg.CreateMap<Source, Destination>());
Mapper.Configuration.AssertConfigurationIsValid();
执行以上代码会产生AutoMapperConfigurationException
,并带有描述性消息。 AutoMapper
检查配置以确保每个目标类型成员在源类型上都有相应类型的成员。
重写配置错误
要修复配置错误(除了重命名源/目标成员),您有三种备选方案:
- Custom Value Resolvers
- Projection
- Use the Ignore() option
使用第三个选项时,将用Ignore()
填充对应目标类型上的成员,而不是通过Map
操作。
Mapper.Initialize(cfg =>
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomeValuefff, opt => opt.Ignore())
);
选择要验证的成员
默认情况下,AutoMapper
使用目标类型所有成员是否都已经被映射来验证配置。使用CreateMap
重新指定要验证的成员列表:
Mapper.Initialize(cfg =>
cfg.CreateMap<Source, Destination>(MemberList.Source);
cfg.CreateMap<Source2, Destination2>(MemberList.None);
);
使用MemberList.None
跳过此映射验证。