【问题标题】:Automapper mockingAutomapper 模拟
【发布时间】:2018-10-21 19:00:27
【问题描述】:

我在我的 webapi 中使用 Automapper 和 Unity DI。如何编写 Automapper 以便我可以模拟它以进行单元测试?我正在使用 Automapper 7.0

public class AutomapperConfiguraiton: Profile
{           
 public static void Configure()
 {
  Mapper.Initialize(cfg =>{cfg.CreateMap<A,B>();});
 }
}

public class Registries
{
  public static UnityContainer GetContainer()
  {
    var container = new UnityContainer();
    container.RegisterType<IABC, ABC>();
  }
}

Webapiconfig.cs

public static class WebApiConfig
{
 public static void Register(HttpConfiguration config)
 {
  AutomapperConfiguration.Configure();
  var container = Registries.GetContainer();
}
}

【问题讨论】:

  • 使用 IMapper 抽象
  • 检查我在这里提供的答案stackoverflow.com/a/39868221/5233410
  • 什么是 Unity DI?
  • @Nkosi:谢谢!我已将我的代码从静态更新为实例 api,这解决了我的问题。

标签: unit-testing unity3d asp.net-web-api automapper moq


【解决方案1】:

使用automapper的Instance api。

public class AutomapperConfiguration : Profile
{
        public static MapperConfiguration Get()
        {
            return new MapperConfiguration(cfg =>
             {Mapper.Initialize(cfg =>{cfg.CreateMap<A,B>();});
             }
         }
}

在 Registries.cs 中

public class Registries
{
  public static UnityContainer GetContainer(MapperConfiguration config)
  {
    var container = new UnityContainer();
    container.RegisterInstance<IMapper>(new Mapper(config), new 
     ContainerControlledLifetimeManager());
  }
}

在 Webapiconfig.cs 中

public static class WebApiConfig
{
 public static void Register(HttpConfiguration config)
 {
  var automapperConfig = AutomapperConfiguration.Get();
  var container = Registries.GetContainer(automapperConfig);
 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多