2010-11-17 9 views
74

मैं कैसे एक विधि को सत्यापित कर सकता हूं जिसे मोक के साथ बिल्कुल एक बार कहा जाता था? Verify() बनाम Verifable() चीज वास्तव में भ्रमित है।मैं कैसे एक विधि को सत्यापित कर सकता हूं जिसे मोक के साथ बिल्कुल एक बार कहा जाता था?

उत्तर

112

आप Times.Once(), या Times.Exactly(1) उपयोग कर सकते हैं:

mockContext.Verify(x => x.SaveChanges(), Times.Once()); 
mockContext.Verify(x => x.SaveChanges(), Times.Exactly(1)); 

यहाँ Times वर्ग पर तरीके हैं:

  • AtLeast - निर्दिष्ट करता है कि एक मज़ाक उड़ाया विधि न्यूनतम के रूप में लागू किया जाना चाहिए बार बार।
  • AtLeastOnce - निर्दिष्ट करता है कि एक मज़ाक उड़ाया विधि न्यूनतम के रूप में एक बार लागू किया जाना चाहिए।
  • AtMost - निर्दिष्ट करता है कि एक मज़ाक उड़ाया विधि बार अनुरोध किया जाना चाहिए अधिकतम के रूप में समय।
  • AtMostOnce - निर्दिष्ट करता है कि एक मज़ाक उड़ाया विधि अधिकतम के रूप में एक बार लागू किया जाना चाहिए।
  • Between - निर्दिष्ट करता है कि एक मज़ाक उड़ाया विधि से और कई बार करने के लिए के बीच लागू किया जाना चाहिए।
  • Exactly - निर्दिष्ट करता है कि एक मज़ाक उड़ाया विधि वास्तव में बार बार अनुरोध किया जाना चाहिए।
  • Never - निर्दिष्ट करता है कि एक मॉक विधि को लागू नहीं किया जाना चाहिए।
  • Once - निर्दिष्ट करता है कि एक मॉक विधि को एक बार लागू किया जाना चाहिए।

बस याद रखें कि वे विधि कॉल हैं; मैं ट्रिप हो रहा था, सोच रहा था कि वे गुण थे और कोष्ठक भूल गए थे।

+0

तो कैसे करना है आप mockContext को प्राप्त/सेटअप करते हैं? – Choco

0

टेस्ट नियंत्रक हो सकता है:

public HttpResponseMessage DeleteCars(HttpRequestMessage request, int id) 
    { 
     Car item = _service.Get(id); 
     if (item == null) 
     { 
      return request.CreateResponse(HttpStatusCode.NotFound); 
     } 

     _service.Remove(id); 
     return request.CreateResponse(HttpStatusCode.OK); 
    } 

और DeleteCars विधि मान्य आईडी के साथ कहा जाता है, तो हम यह सुनिश्चित कर सकता है, सेवा को निकालने विधि इस परीक्षण से ठीक एक बार कहा जाता है:

[TestMethod] 
    public void Delete_WhenInvokedWithValidId_ShouldBeCalledRevomeOnce() 
    { 
     //arange 
     const int carid = 10; 
     var car = new Car() { Id = carid, Year = 2001, Model = "TTT", Make = "CAR 1", Price=2000 }; 
     mockCarService.Setup(x => x.Get(It.IsAny<int>())).Returns(car); 

     var httpRequestMessage = new HttpRequestMessage(); 
     httpRequestMessage.Properties[HttpPropertyKeys.HttpConfigurationKey] = new HttpConfiguration(); 

     //act 
     var result = carController.DeleteCar(httpRequestMessage, vechileId); 

     //assert 
     mockCarService.Verify(x => x.Remove(carid), Times.Exactly(1)); 
    }