您如何模拟AutoMapper MapTo?

时间:2019-02-21 16:14:16

标签: c# unit-testing automapper moq

关于单元测试自动映射器“ 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”的调用?

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

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

_mapper = new Mapper(CreateMaps());

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

2 个答案:

答案 0 :(得分:1)

我不确定你可以。 MapTo(...)基本上是一个静态方法,就像其他方法一样,带有一些精美的语法,使其看起来像IDE中对象的一部分。

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

答案 1 :(得分:1)

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