zoukankan      html  css  js  c++  java
  • Mapper not initialized. Call Initialize with appropriate configuration.

    System.InvalidOperationException:“Mapper not initialized. Call Initialize with appropriate configuration. If you are trying to use mapper instances through a container or otherwise, make sure you do not have any calls to the static Mapper.Map methods, and if you're using ProjectTo or UseAsDataSource extension methods, make sure you pass in the appropriate IConfigurationProvider instance.”

    Here is the code for the method that I'm developing the unit test for:

    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");
        }
    
    }

    Following is the code from the mapping configuration file:

    public static class MappingConfig
    {
        public static void RegisterMaps()
        {
            Mapper.Initialize(config =>
            {
                config.CreateMap<Item, itemsListingViewModel>();
            });
        }
    }

    And I have initialized mapper in the Application_Start() event of the Global.asax as below:

    MappingConfig.RegisterMaps();

    Below is the simple test method that I'm trying to run:

    [TestMethod]
    public void ItemsListing()
    {
        HomeController controller = new HomeController();
    
        ViewResult result = controller.ItemsListing() as ViewResult;
    
        Assert.IsNotNull(result);
    }

    It works fine when I simply run the application. But when I try to run the unit test method, it shows the mentioned error message. Can anyone help me to get over this issue? Thanks!

    shareimprove this question
     
        
    What test framework are you using, MSTest? – LukeW Aug 17 '16 at 14:48
        
    @LukeW: Yes, it is MSTest. – user1990 Aug 17 '16 at 14:50
    1  
    @user1990, Are you calling MappingConfig.RegisterMaps(); in your unit tests? – Nkosi Aug 17 '16 at 15:25 

    You need to create/register the mappings for your unit tests as well as the Application_Start() is not executed. It is associated with IIS, which is not running during unit tests. You have to manually call the mapping configurations.

    [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);
        }
    }

    In the above test the mapping configuration is done in a method decorated with [ClassInitialize]attribute which

    ClassInitializeAttribute Class Identifies a method that contains code that must be used before any of the tests in the test class have run and to allocate resources to be used by the test class.

  • 相关阅读:
    日记1
    JDK、JRE、JVM三者间的关系
    线性表之二,SLINKLIST(单链表)类,模板类及C链表(增删改查,广义表
    线性表之一,SEQLIST(顺序表)类及其父类LIST,模板类及C结构体,包装顺序表
    PTA(中国人民解放军陆军工程大学数据结构,C语言)
    冒泡排序
    选择排序、堆排序
    冒泡排序,快速排序
    springMVC定时器
    MD5加密
  • 原文地址:https://www.cnblogs.com/endv/p/6896608.html
Copyright © 2011-2022 走看看