74
如何驗證一個方法與Moq恰好被調用一次? Verify()
與Verifable()
事情真的很混亂。如何驗證一個方法與Moq完全調用一次?
如何驗證一個方法與Moq恰好被調用一次? Verify()
與Verifable()
事情真的很混亂。如何驗證一個方法與Moq完全調用一次?
您可以使用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
- 指定應該一次調用模擬方法。只記得他們是方法調用;我不斷絆倒,認爲他們是屬性,忘記了括號。
測試控制器可能是:
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));
}
所以怎麼辦你得到/設置mockContext? – Choco 2017-11-09 04:18:28