我在控制器中使用 AutoMapper 将我的模型对象映射到我的 ViewModel 对象。Unity 在我的控制器中注入了一个 IMappingEngine 对象,并且映射配置在 global.asax 中完成。
在我的控制器的单元测试中,我应该如何模拟在构造函数中作为参数传递的 IMappingEngine ?
我是否必须在单元测试项目中再次设置所有映射配置?
我在控制器中使用 AutoMapper 将我的模型对象映射到我的 ViewModel 对象。Unity 在我的控制器中注入了一个 IMappingEngine 对象,并且映射配置在 global.asax 中完成。
在我的控制器的单元测试中,我应该如何模拟在构造函数中作为参数传递的 IMappingEngine ?
我是否必须在单元测试项目中再次设置所有映射配置?
如果您通过使用接口抽象 AutoMapper,那么您不必在单元测试中使用 AutoMapper。这是一个单元测试,因此您只测试控制器操作中的代码。您需要做的就是使用像 RhinoMocks 或 Moq 这样的模拟框架并模拟您的测试所需的行为。使用 RhinoMocks 你会得到这样的东西:
var mapper= MockRepository.GenerateStub<IMappingEngine>();
然后使用 mapper.Stub 添加您需要的行为。
为什么首先要注入 AutoMapper?
由于您的控制器(ViewModels)的输出取决于映射,您的测试应该测试什么?
我怀疑您的代码中有太多抽象。直接使用 AutoMapper 没有任何问题。