【发布时间】: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