2010-11-17 78 views

回答

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 - 指定應該在from和to之間調用mocked方法。
  • Exactly - 指定一個模擬方法應該被調用多次。
  • Never - 指定不應調用模擬方法。
  • Once - 指定應該一次調用模擬方法。

只記得他們是方法調用;我不斷絆倒,認爲他們是屬性,忘記了括號。

+0

所以怎麼辦你得到/設置mockContext? – Choco 2017-11-09 04:18:28

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)); 
    } 
相關問題