你如何模拟 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.
一样对待它
我看到很多关于单元测试自动映射器的问题 '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.
一样对待它