我们在ASP.NET MVC Web应用程序中广泛使用AutoMapper,并在this question中设置了AutoMapViewResult方法 . 所以我们的行为看起来像这样:
public ActionResult Edit(User item)
{
return AutoMapView<UserEditModel>(View(item));
}
如果尚未配置请求的映射,则会在应用程序中创建隐藏的故障点 - 因为这不是编译时失败 .
我正在考虑放置一些东西来测试这些映射 . 由于这需要测试实际的AutoMapper配置,我认为这应该作为集成测试的一部分来完成?这些测试应该按照控制器还是按实体构建?如何自动解析对AutoMapView的所有调用?
请注意,我们已经使用AssertConfigurationIsValid测试AutoMapper配置是否有效,它缺少我想要处理的映射 .
4 回答
您可以使用
AssertConfigurationIsValid
方法 . 详细信息在automapper codeplex站点上(http://automapper.codeplex.com/wikipage?title=Configuration%20Validation)严格来说,您应该编写一个测试来验证映射 before 您编写的控制器操作取决于存在的映射配置 .
无论哪种方式,您都可以使用MvcContrib项目中的Test Helpers来检查action方法返回预期的ViewResult和Model .
这是一个例子:
如果您的控制器操作如下所示:
然后,您可以非常轻松地使用反射查找项目中的所有控制器操作 . 然后,检查AutoMapView操作结果的操作参数类型和泛型类型参数 . 最后,您询问AutoMapper是否具有这些输入/输出模型的类型映射 . AutoMapper没有“CanMap”方法,但您可以使用FindTypeMapFor的IConfigurationProvider方法:
只要确保它不是空的 .
我这样做 .