我正在尝试在我的MVC应用程序中对以下控制器代码进行单元测试。
[AllowAnonymous]
public ActionResult Index(string sort)
{
IEnumerable<Artist> artists;
if (Request.IsAuthenticated)
{
artists = _artistService.GetArtistsForUser(User.Identity.GetUserId());
if (!string.IsNullOrEmpty(sort) && sort != "asc")
{
ViewBag.Sort = "desc";
artists = artists.OrderByDescending(a => a.FName);
}
}
else
{
artists = _artistService.GetArtists(false);
if (!string.IsNullOrEmpty(sort) && sort != "asc")
{
ViewBag.Sort = "desc";
artists = artists.OrderByDescending(a => a.FName);
}
}
var vm = new ArtistIndexVM { Artists = Mapper.Map<IEnumerable<Artist>, IEnumerable<ArtistVM>>(artists) };
return View(vm);
}
请注意,在最终返回语句之前,我有一个AutoMapper映射。当我尝试运行单元测试时,这会引发错误。错误是
测试方法Project.Controllers.ArtistControllerTests.Index_Get_ReturnsAViewResult抛出异常: AutoMapper.AutoMapperMappingException:缺少类型映射配置或不支持的映射。
解决此问题的最佳方法是什么,而无需在测试项目中再次重新定义映射?你知道,这与Don不重复自己(DRY)原则一致。
答案 0 :(得分:0)
确保在单元测试之前调用Mapper.Initialize初始化。您应该在应用程序的启动时调用Mapper.Initialize,通常是用于MVC应用程序的App_Start。
你只需要调用Mapper.Initialize一次,所以常见的方法是将它放在你的启动的静态构造函数中。