你如何模拟AutoMapper MapTo?

问题描述 投票:0回答:2

我已经看到很多关于单元测试automapper'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似乎很容易

c# unit-testing automapper moq
2个回答
1
投票

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

鉴于它实际上并不是你嘲笑的对象的一部分,你的选择是有限的。你最好的选择是查看MapTo(...);的代码,也许内部是可以模仿的。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.