2017-05-06 70 views
6

Varolan MVC Web Uygulaması için bir birim testi yazmaya çalışıyorum. O zaman ben automapper bir sorunla karşılaşıyorum (IMapper) Ne zaman harita fonksiyonu kullanıyorum null değerini döndürür.Denetleyicide Automapper (IMapper) nasıl yapılır

Benim Kontrolörü Kodu:

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 Haritalama Kodu:

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

alay ediyor Kodu:

[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 onun her zaman denetleyicisi null değerini gösteren çalışmıyor. lütfen bana yardım et. Şimdiden teşekkürler.

+1

"Neden ihtiyacım var?" Diye sormak isteyebilir. Otomatik haritalayıcı, eşleme yapılandırmalarının doğru olduğunu iddia edebilir. Muhtemelen kullanıcı hizmetiniz test edilir. Bu nedenle kontrol cihazlarınızı test etmeye gerek yoktur. – Mardoxx

+0

Ya bu iyi. Bu benim müşteri gereksinimidir, onlar da denetleyici için birim testi yapmak isterler. daha sonra httppost içinde bazı ekleme işlevselliği olabilir, bu yüzden bunu yapmam için bana yardım etmeliyim. – Dinesh

cevap

1

Aşağıdaki denemelisiniz:

şey, sizin sahte UserDetailViewModel mülakat = getUserDetailViewModel kesin örneğini() bekliyordum edilir

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; 
    } 
} 
; Bu eşleştirmeyi kurmak için, ve bu yüzden null döndürüyordu. Null, UserDetailViewModel'e herhangi bir başvuru bekliyor olacak ve UserDetailtViewModel'e yapılan herhangi bir başvuru için beklenen eşlenen örneği döndürecektir.

+0

Bir hata mesajı "Yöntem Grubundan 'UserDetail' 'e Dönüştürülemiyor" – Dinesh

4

AutoMapper alaycı olmamasını tavsiye ederim. Biri için denetleyici birim testlerinde fazla bir değer yoktur ve bu bir JSON serileştiricisi ile aynıdır. Sadece gerçek olanı kullan.

+1

gibi bir hata mesajı gösteriyorum OP'nin sizi dinlemesi gerektiğini düşünüyorum. Konu hakkında biraz bilginiz olabilir. :-) –

+0

Denetleyicideki somut uygulamayı kullanmak beni çok rahatsız etse de, size katılıyorum. – Esen