【问题标题】:How do you Mock AutoMapper MapTo?你如何模拟 AutoMapper MapTo?
【发布时间】:2019-02-21 16:14:16
【问题描述】:

我已经看到很多关于单元测试自动映射器“map”的问题,但是如何模拟“MapTo”。这需要一个 IMapper 作为它的对象。所以,这就是我目前所拥有的:

private Mock<IMapper> _mapper;

[TestInitialize]
public void Init()
{
    _mapper = new Mock<IMapper>();

    //other stuff initialised.
}

[TestMethod]
public void MyTest()
{
    _mapper.Setup(m => m.MapTo<IList<Something>>(_mapper.Object)).Returns(myList);

    //setup repository etc.
}

这会引发“扩展方法上的设置无效...”的错误。那么,如何模拟对“MapTo”的调用?

澄清一下,我知道我可以使用实际版本的映射器并创建实际地图,例如:

private MapperConfiguration CreateMaps()
{
    return new MapperConfiguration(mc =>
   {
       mc.CreateMap<MyEntity, MyObject>();
       mc.CreateMap<MyOtherEntity, MyOtherObject>();
   });
}

_mapper = new Mapper(CreateMaps());

但是,我仍然很好奇如何模拟它。使用 Map 而不是 MapTo 似乎很容易

【问题讨论】:

  • 为什么要模拟 IMapper?您可以简单地在测试中使用它。
  • @LucianBargaoanu - 是的,我知道,只是好奇。查看更新
  • 您需要使用自己的 IMapper 抽象来包装 automapper - 只有实现包装器接口的具体 MyAutoMapper 具体类才允许访问 AM 静态和扩展方法。

标签: c# unit-testing automapper moq


【解决方案1】:

我不确定你能做到。 MapTo(...) 基本上是一个静态方法,与任何其他方法一样,具有一些花哨的语法,使其看起来像是 IDE 中对象的一部分。

鉴于它实际上不是您要模拟的对象的一部分,因此您的选择是有限的。最好的办法是查看MapTo(...); 的代码,也许内部是可模拟的。

【讨论】:

    【解决方案2】:

    不要?这不值得。像 JSON.NET 一样对待它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      相关资源
      最近更新 更多