测试方法' X'抛出异常:System.InvalidOperationException:Mapper未初始化。使用适当的配置调用Initialize

时间:2016-08-17 14:42:53

标签: c# asp.net-mvc unit-testing automapper

以下是我开发单元测试的方法的代码:

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();

我只是运行应用程序时工作正常。但是当我尝试运行单元测试方法时,它会显示上面提到的错误消息。任何人都可以帮我解决这个问题吗?谢谢!

1 个答案:

答案 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   标识包含必须在任何之前使用的代码的方法   测试类中的测试已经运行并分配资源   测试类使用。