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ę.
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
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