以下是我开发单元测试的方法的代码:
public ActionResult ItemsListing()
{
var itemsList = itemsRepository.GetItems(true);
if (itemsList.Count() > 0)
{
var itemsListVMs = Mapper.Map<IEnumerable<Item>, IEnumerable<itemsListingViewModel>>(itemsList);
return View(itemsListVMs);
}
else
{
return RedirectToAction("Home");
}
}
以下是映射配置文件中的代码:
public static class MappingConfig
{
public static void RegisterMaps()
{
Mapper.Initialize(config =>
{
config.CreateMap<Item, itemsListingViewModel>();
});
}
}
我已在Application_Start()
的{{1}}事件中初始化了mapper,如下所示:
Global.asax
以下是我尝试运行的简单测试方法:
MappingConfig.RegisterMaps();
我只是运行应用程序时工作正常。但是当我尝试运行单元测试方法时,它会显示上面提到的错误消息。任何人都可以帮我解决这个问题吗?谢谢!
答案 0 :(得分:6)
您需要为单元测试创建/注册映射,并且不执行Application_Start()
。它与IIS相关联,在单元测试期间未运行。您必须手动调用映射配置。
[TestClass]
public class HomeControllerTests {
[ClassInitialize]
public static void Init(TestContext context) {
MappingConfig.RegisterMaps();
}
[TestMethod]
public void ItemsListing() {
HomeController controller = new HomeController();
ViewResult result = controller.ItemsListing() as ViewResult;
Assert.IsNotNull(result);
}
}
在上面的测试中,映射配置是在用[ClassInitialize]
属性
ClassInitializeAttribute Class 标识包含必须在任何之前使用的代码的方法 测试类中的测试已经运行并分配资源 测试类使用。