你如何模拟 AutoMapper MapTo?

How do you Mock AutoMapper MapTo?

我看到很多关于单元测试自动映射器的问题 '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.
}

这会引发 "Invalid setup on an extension method..." 错误。那么,如何模拟对 'MapTo' 的调用?

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

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

_mapper = new Mapper(CreateMaps());

不过,我还是很好奇如何模拟它。使用 Map 而不是 MapTo

似乎很容易

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

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

不是吗?这不值得。像 JSON.NET.

一样对待它