2010-07-03 11 views
28

यह एक ASP.NET MVC परियोजना में मेरी नियंत्रकों में से एक से एक यूनिट-परीक्षण, NUnit और Moq उपयोग कर रहा है:Moq - सत्यापित करें कि कोई तरीकों कहा जाता था

[Test] 
public void Create_job_with_modelstate_errors_fails() 
{ 
    var job = new JobDto(); 
    this.controller.ModelState.AddModelError("", ""); 

    ActionResult result = this.controller.Create(job); 

    this.jobService.Verify(p => p.SaveJob(It.IsAny<JobDto>()), Times.Never()); 

    // some other asserts removed for brevity 
} 

यह ठीक काम करता है, लेकिन एक रखरखाव से दृष्टि मुझे लगता है कि इस लाइन में अधिक वर्बोज़ की तुलना में यह करने की जरूरत है:

this.postService.Verify(p => p.SavePost(It.IsAny<PostDto>()), Times.Never()); 

क्या मैं सच में ऐसा करने में सक्षम होना चाहते हैं कुछ के बराबर है ...

this.postService.VerifyNoMethodsCalled(); 

... जैसा कि मुझे दिलचस्पी है, यह है कि मेरा नियंत्रक सेवा पर किसी भी तरीके से कॉल नहीं करता है। क्या यह मोक का उपयोग कर संभव है?

+1

गूगल खोजकर्ताओं असफल हो जायेगी: आप यह सत्यापित करते हुए सिर्फ एक, विशेष विधि आमंत्रित नहीं किया गया में रुचि रखते हैं , यह वह प्रश्न है जिसे आप चाहते हैं: http://stackoverflow.com/questions/537308/how-to-verify-that-method-was-not-called-in-moq –

उत्तर

37

आप मॉकबैवियर के साथ मॉक बना सकते हैं। सख्त, उदा।

this.postService = new Mock<IPostService>(MockBehavior.Strict); 

इस तरह, यदि आप सेटअप किसी भी उम्मीदों नहीं करते हैं, this.postService के लिए किसी भी कॉल

+0

आह, धन्यवाद। मुझे MockBehavior.Strict के बारे में पता नहीं था। – richeym

+0

जब आप किसी एमवीसी नियंत्रक संदर्भ की तरह कुछ नकल करने की कोशिश कर रहे हैं, तो यह डिबगिंग के लिए भी बहुत आसान है, क्योंकि त्रुटि संदेश यह आपको देता है जब आपके पास अपेक्षाकृत सेटअप नहीं होता है, तो जब आप उपयोग करते समय शून्य संदर्भ अपवादों से अधिक सहज होते हैं डिफ़ॉल्ट MockBehavior.Loose –

+0

जानना अच्छा है, धन्यवाद – CRice

संबंधित मुद्दे