2017-05-06 49 views
6

Próbuję napisać test jednostkowy dla mojej istniejącej aplikacji internetowej MVC. W tej sytuacji napotykam pewien problem w automapper (IMapper) Za każdym razem, gdy używam funkcji map, zwraca ona wartość null.Jak wyśmiać Automapper (IMapper) w kontrolerze

mój kod kontrolera:

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 Kod Mapowanie:

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

Kod Mocking:

[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 nie działa zawsze pokazując jej wartość w kontrolerze null. życzliwie mi pomóż. Z góry dziękuję.

+1

Może chcesz zapytać: "Dlaczego muszę?" Automapper może potwierdzić, że konfiguracja mapowania jest poprawna. Prawdopodobnie twoja usługa użytkownika jest testowana. Dlatego nie ma potrzeby testowania kontrolerów. – Mardoxx

+0

To dobrze. To jest mój wymóg klienta, który prosi o przeprowadzenie testów jednostkowych dla kontrolera. następnie w httppost może mieć pewne dodatkowe funkcje, więc muszę to zrobić uprzejmie mi pomóc z tego. – Dinesh

Odpowiedz

1

Należy spróbować następujących czynności:

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

Rzecz jest Twój mock liczyłem dokładnie wystąpienie UserDetailViewModel wywiadzie = getUserDetailViewModel(); aby skonfigurować to odwzorowanie, dlatego właśnie zwracał wartość null. Null będzie oczekiwał jakiegokolwiek odniesienia do UserDetailViewModel i dla dowolnego odwołania do UserDetailtViewModel zwróci oczekiwaną zmapowaną instancję.

+0

Pokazywanie komunikatu o błędzie jako "Nie można konwertować z" grupy metod "na" UserDetail "" – Dinesh

4

Polecam, nie kpiąc z AutoMappera. Nie ma zbyt wiele wartości w testach jednostkowych kontrolerów dla jednego, a to jest podobne do szyderstwa serializatora JSON. Po prostu użyj prawdziwej rzeczy.

+1

Mam wrażenie, że program operacyjny powinien Cię wysłuchać. Możesz mieć trochę wiedzy na ten temat. :-) –

+0

Zgadzam się z Tobą, chociaż użycie konkretnej implementacji w sterowniku bardzo mnie martwi. – Esen