2017-05-06 14 views
6

में Automapper (IMapper) का नकल कैसे करें मैं अपने मौजूदा एमवीसी वेब अनुप्रयोग के लिए एक यूनिट परीक्षण लिखने की कोशिश कर रहा हूं। उसमें मुझे ऑटोमैपर में कुछ समस्या का सामना करना पड़ रहा है (IMapper) जब भी नक्शा फ़ंक्शन का उपयोग कर रहा हूं तो यह null मान देता है।नियंत्रक

मेरे नियंत्रक कोड:

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

नकली मानचित्रण कोड:

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

मजाक कोड:

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

मैपर काम नहीं कर रहा है अपने हमेशा दिखा नियंत्रक में null मूल्य। कृपया मेरी मदद करो। अग्रिम में धन्यवाद।

+1

शायद पूछना चाहें, "मुझे इसकी आवश्यकता क्यों है?" ऑटोमैपर मैपिंग कॉन्फ़िगरेशन पर जोर दे सकता है सही है। संभवतः आपकी उपयोगकर्ता सेवा का परीक्षण किया जाता है। इसलिए आपके नियंत्रकों का परीक्षण करने की कोई आवश्यकता नहीं है। – Mardoxx

+0

हां ठीक है। यह मेरी ग्राहक आवश्यकता है कि वे नियंत्रक के लिए यूनिट परीक्षण करने के लिए भी कहते हैं। फिर httppost में इसमें कुछ अतिरिक्त कार्यक्षमता हो सकती है, इसलिए मुझे इसे करने की ज़रूरत है कृपया मुझे इससे मदद करें। – Dinesh

उत्तर

1

आप निम्न प्रयास करना चाहिए:

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

बात है, अपने नकली UserDetailViewModel साक्षात्कार = getUserDetailViewModel का सही उदाहरण() उम्मीद कर रहा था; इस मैपिंग को सेटअप करने के लिए, और यही कारण है कि यह शून्य लौट रहा था। शून्य यह UserDetailViewModel के किसी भी संदर्भ की अपेक्षा करेगा और UserDetailtViewModel के किसी भी संदर्भ के लिए यह अपेक्षित मैप किए गए उदाहरण को वापस कर देगा।

+0

यह एक त्रुटि संदेश दिखा रहा है "विधि समूह 'से' उपयोगकर्ता सूची 'में कनवर्ट नहीं किया जा सकता है" – Dinesh

4

मैं ऑटोमैपर का मज़ाक उड़ाए जाने की अनुशंसा नहीं करता। एक के लिए नियंत्रक इकाई परीक्षण में बहुत अधिक मूल्य नहीं है, और यह एक JSON serializer का मज़ाक उड़ाता है। बस असली चीज़ का प्रयोग करें।

+1

मुझे लगता है कि ओपी आपको सुनना चाहिए। आपको इस विषय पर कुछ ज्ञान हो सकता है। :-) –

+0

मैं आपके साथ सहमत हूं, भले ही नियंत्रक में ठोस कार्यान्वयन का उपयोग करने से मुझे बहुत परेशान हो। – Esen