2010-02-26 22 views
17

AutoMapper'da Harita işlevi için sahte bir expection ayarlamanın en iyi yolu nedir.Mock AutoMapper Mapper.Map kullanarak arama yapma

IMapper arabirimini ayırıyorum, böylece bu arabirim için beklentiler ayarlayabilirim. Haritacımın bağımlılıkları var, bu yüzden bunları haritacıya iletmeliyim.

2 farklı bağımlılık uygulamasıyla eşleştirici sınıfımın 2 örneğini oluşturduğumda ne olur? AutoMapper haritasının statik olması nedeniyle, her iki eşleştiricinin de aynı bağımlılık örneğini kullanacağını düşünüyorum. Veya AutoMapper bir istisna atabilir, çünkü aynı nesnelerle 2 farklı harita kurmaya çalışıyorum.

Bunu çözmenin en iyi yolu nedir?

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); 
    } 
} 

cevap

25

nedir kurulum için en iyi yol AutoMapper Harita fonksiyonu için sahte expection

İşte bir yolu [?]:

var mapperMock = new Mock<IMapper>(); 
mapperMock.Setup(m => m.Map<Foo, Bar>(It.IsAny<Foo>())).Returns(new Bar()); 
2

Yapmanız gereken şey, AutoMapper'ı bu şekilde yapılandırmaktır (StructureMap is IoC). Daha sonra hizmetlerinizi IMappingEngine'ye göre yapabilirsiniz. Oradan alay etmek çok kolay olmalı.

public class AutoMapperConfigurationRegistry : Registry 
    { 
     public AutoMapperConfigurationRegistry() 
     { 
      ForRequestedType<Configuration>() 
       .CacheBy(InstanceScope.Singleton) 
       .TheDefault.Is.OfConcreteType<Configuration>() 
       .CtorDependency<IEnumerable<IObjectMapper>>().Is(expr => expr.ConstructedBy(MapperRegistry.AllMappers)); 

      ForRequestedType<ITypeMapFactory>().TheDefaultIsConcreteType<TypeMapFactory>(); 

      ForRequestedType<IConfigurationProvider>() 
       .TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<Configuration>()); 

      ForRequestedType<IConfiguration>() 
       .TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<Configuration>()); 
     } 
    }