如何在ASP.NET MVC单元测试中模拟AutoMapper

如何在ASP.NET MVC单元测试中模拟AutoMapper,asp.net,asp.net-mvc-4,unity-container,automapper,Asp.net,Asp.net Mvc 4,Unity Container,Automapper,我在控制器中使用AutoMapper将模型对象映射到ViewModel对象。 Unity将ImapingEngine对象注入到我的控制器中,映射配置在global.asax中完成 在控制器的单元测试中,我应该如何模拟作为构造函数中的参数传递的IMappingEngine 我必须在单元测试项目中重新设置所有映射配置吗 首先你为什么要注射AutoMapper 由于控制器(ViewModels)的输出依赖于映射,您的测试应该测试什么 我怀疑您的代码中有点太多的抽象。直接使用AutoMapper没有什么

我在控制器中使用AutoMapper将模型对象映射到ViewModel对象。 Unity将ImapingEngine对象注入到我的控制器中,映射配置在global.asax中完成

在控制器的单元测试中,我应该如何模拟作为构造函数中的参数传递的IMappingEngine


我必须在单元测试项目中重新设置所有映射配置吗

首先你为什么要注射AutoMapper

由于控制器(ViewModels)的输出依赖于映射,您的测试应该测试什么


我怀疑您的代码中有点太多的抽象。直接使用AutoMapper没有什么错。

如果您通过使用接口来抽象AutoMapper,那么这一点就是,您不必在单元测试中使用AutoMapper。这是一个单元测试,所以您只测试控制器操作中的代码。您所需要做的就是使用一个模拟框架,比如RhinoMocks或Moq,模拟测试所需的行为。使用Rhinomock,您将获得如下内容:

var mapper= MockRepository.GenerateStub<IMappingEngine>();
var mapper=MockRepository.GenerateStub();

然后使用mapper.Stub添加您需要的行为。

您能添加一些示例代码来说明您的困境吗?这将使给你一个好答案变得更容易。还有,你们在测试中使用了什么样的模拟库?好的,这似乎就是我想要的。但是我对映射器有点困惑。存根部分。。。我是否基本上传递了Automapper通常期望的输出,以便在没有Automapper的情况下对控制器进行测试?完全正确,您使存根的性能与期望Automapper正常运行的性能相同。可能是为了避免在映射时将Mapper用作静态类,这似乎是汽车制造商的创造者的遗憾之一,并被标记为过时。