Ale*_*son 24 c# moq automapper
什么是在AutoMapper中为Map函数设置模拟预览的最佳方法.
我提取IMapper接口,以便我可以设置该接口的预期.我的映射器有依赖关系,所以我必须将它们传递给映射器.
当我创建2个mapper类实例时会发生什么,有2个不同的依赖实现?我认为两个映射器将使用相同的依赖项实例,因为AutoMapper映射是静态的.或者AutoMapper甚至可能会抛出异常,因为我尝试使用相同的对象设置2个不同的地图.
什么是解决这个问题的最佳方法?
public interface IMapper {
TTarget Map<TSource, TTarget>(TSource source);
void ValidateMappingConfiguration();
}
public class MyMapper : IMapper {
private readonly IMyService service;
public MyMapper(IMyService service) {
this.service = service
Mapper.CreateMap<MyModelClass, MyDTO>()
.ForMember(d => d.RelatedData, o => o.MapFrom(s =>
service.getData(s.id).RelatedData))
}
public void ValidateMappingConfiguration() {
Mapper.AssertConfigurationIsValid();
}
public TTarget Map<TSource, TTarget>(TSource source) {
return Mapper.Map<TSource, TTarget>(source);
}
}
Run Code Online (Sandbox Code Playgroud)
ata*_*ati 35
您不需要模拟 AutoMapper,您可以按照此处的说明注入真正的 AutoMapper :
var myProfile = new MyProfile();
var configuration = new MapperConfiguration(cfg => cfg.AddProfile(myProfile));
IMapper mapper = new Mapper(configuration);
Run Code Online (Sandbox Code Playgroud)
您可以在单元测试中注入此映射器。使用 AutoMapper 等工具的全部意义在于您不必编写大量映射代码。如果您模拟 AutoMapper,您最终将不得不这样做。
Mar*_*ann 33
什么是在AutoMapper中为Map函数设置模拟预测的最佳方法[?]
这是一种方式:
var mapperMock = new Mock<IMapper>();
mapperMock.Setup(m => m.Map<Foo, Bar>(It.IsAny<Foo>())).Returns(new Bar());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15603 次 |
| 最近记录: |