使用Moq模拟AutoMapper Mapper.Map调用

问题描述 投票:24回答:4

什么是在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);
    }
}

什么是在AutoMapper中为Map函数设置模拟期望的最佳方法。我提取了IMapper界面,因此可以设置该界面的期望值。我的映射器具有依赖性,因此我必须...

c# moq automapper
4个回答
33
投票

为AutoMapper中的Map函数设置模拟期望的最佳方法是什么?



2
投票

您需要做的是这样设置AutoMapper(StructureMap是IoC)。然后,您可以使服务依赖于IMappingEngine。从那里进行模拟应该非常容易。


1
投票

您不需要模拟AutoMapper,只需按照here的说明注入真实的AutoMapper:

© www.soinside.com 2019 - 2024. All rights reserved.