How to mock Automapper (IMapper) in controller

asp.net-mvc, automapper, c#, mocking, unit-testing

Solution

You should try the following:

public class MappingDataTest : CommonTestData
{
    public Mock<IMapper> MappingData()
    {
        var mappingService = new Mock<IMapper>();

        UserDetail im = getUserDetail(); // get value of UserDetails

        mappingService.Setup(m => m.Map<UserDetail, UserDetailViewModel>(It.IsAny<UserDetail>())).Returns(interview); // mapping data
        mappingService.Setup(m => m.Map<UserDetailViewModel, UserDetail>(It.IsAny<UserDetailtViewModel>())).Returns(im); // mapping data

        return mappingService;
    }
}

The thing is, your mock was expecting the exact instance of UserDetailViewModel interview = getUserDetailViewModel(); to setup this mapping, and this is why it was returning null. Null it will be expecting any reference to UserDetailViewModel and for any reference to UserDetailtViewModel it will return the expected mapped instance.

Problem

I am trying to write a unit test for my existing MVC Web Aplication. In that I am facing some problem in automapper (`IMapper`) Whenever am using map function it returns `null` value. My Controller Code: ``` public class UserAdministrationController : BaseController { private readonly iUserService _userService; private readonly IMapper _mapper; public NewsController(iUserService userService, IMapper mapper) { _userService = userService; _mapper = mapper; } public ActionResult Create(int CompanyID == 0) { UserDetail data = _userService(CompanyID); var Modeldata = _mapper.Map<UserDetailViewModel, UserDetail>(data); return View(Modeldata); } } ``` Mock Mapping Code: ``` public class MappingDataTest : CommonTestData { public Mock<IMapper> MappingData() { var mappingService = new Mock<IMapper>(); UserDetailViewModel interview = getUserDetailViewModel(); // get value of UserDetailViewModel UserDetail im = getUserDetail(); // get value of UserDetails mappingService.Setup(m => m.Map<UserDetail, UserDetailViewModel>(im)).Returns(interview); mappingService.Setup(m => m.Map<UserDetailViewModel, UserDetail>(interview)).Returns(im); return mappingService; } } ``` Mocking Code: ``` [TestClass] public class UserAdminControllerTest { private MappingDataTest _common; [TestInitialize] public void TestCommonData() { _common = new MappingDataTest(); } [TestMethod] public void UserCreate() { //Arrange UserAdministrationController controller = new UserAdministrationController(_common.mockUserService().Object, _common.MappingData().Object); controller.ControllerContext = _common.GetUserIdentity(controller); // Act ViewResult newResult = controller.Create() as ViewResult; // Assert Assert.IsNotNull(newResult); } } ``` Mapper is not working its always showing the `null` value in controller. kindly help me. Thanks in Advance.

Original source