Mapper not initialized. Call Initialize with appropriate configuration.

知识就是力量,时间就是生命。这篇文章主要讲述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.”
【Mapper not initialized. Call Initialize with appropriate configuration.】 

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!
c#  asp.net-mvc  unit-testing  automapper
shareimprove this question edited  Aug 17 ‘16 at 15:30
Mapper not initialized. Call Initialize with appropriate configuration.

文章图片
Nkosi 33.7k92864
asked  Aug 17 ‘16 at 14:42
Mapper not initialized. Call Initialize with appropriate configuration.

文章图片
user1990 6010
 
     
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 
add a comment
1 Answeractiveoldestvotes
up vote3down voteaccepted 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.

    推荐阅读