2017-05-06 19 views
6

Tôi đang cố viết một bài kiểm tra đơn vị cho Ứng dụng Web MVC hiện tại của tôi. Trong đó tôi đang đối mặt với một số vấn đề trong automapper (IMapper) Bất cứ khi nào đang sử dụng chức năng bản đồ nó trả về null giá trị.Làm thế nào để giả lập Automapper (IMapper) trong bộ điều khiển

My khiển 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 Mã số:

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

Mã 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 không hoạt động của nó luôn hiển thị giá trị null trong bộ điều khiển. vui lòng giúp tôi. Cảm ơn trước.

+1

Có thể muốn hỏi, "Tại sao tôi cần phải?" Automapper có thể khẳng định cấu hình ánh xạ là chính xác. Có lẽ dịch vụ người dùng của bạn đã được kiểm tra. Do đó không cần phải kiểm tra bộ điều khiển của bạn. – Mardoxx

+0

Điều đó tốt. Đây là yêu cầu của khách hàng của họ, họ yêu cầu làm thử nghiệm đơn vị cho bộ điều khiển. sau đó trong httppost nó có thể có một số chức năng bổ sung vì vậy tôi cần phải làm điều đó vui lòng giúp tôi ra khỏi này. – Dinesh

Trả lời

1

Bạn nên thử như sau:

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

Vấn đề là, mô hình của bạn đã mong dụ chính xác của UserDetailViewModel phỏng vấn = getUserDetailViewModel(); để thiết lập ánh xạ này, và đây là lý do tại sao nó trả về null. Null nó sẽ được mong đợi bất kỳ tài liệu tham khảo để UserDetailViewModel và cho bất kỳ tài liệu tham khảo để UserDetailtViewModel nó sẽ trở lại dự kiến ​​ánh xạ dụ.

+0

Hiển thị thông báo lỗi là "Không thể chuyển đổi từ 'Nhóm phương pháp' thành 'UserDetail'" – Dinesh

4

Tôi khuyên bạn không nên chế nhạo AutoMapper. Không có nhiều giá trị trong các bài kiểm tra đơn vị điều khiển cho một, và điều này tương tự như chế nhạo một serializer JSON. Chỉ cần sử dụng thực tế.

+1

Tôi cảm thấy như OP nên lắng nghe bạn. Bạn có thể có một số kiến ​​thức về chủ đề này. :-) –

+0

Tôi đồng ý với bạn, mặc dù việc sử dụng việc triển khai cụ thể trong bộ điều khiển làm phiền tôi rất nhiều. – Esen

Các vấn đề liên quan