Я новичок в Moq и пытаюсь реализовать 2 теста, которые проверяют наличие HttpStatusCode.NotModified
и HttpStatusCode.Ok
. Тем не менее, последний проходит свой тест, но первый не проходит и возвращает исключение:
Moq.MockException: ожидаемый вызов на макет один раз, но был 0 раз: x => x.UpdateStateAsyn c (It.Is (y => y == RedisServiceModel))
Вот HttpStatusCode.Ok
, который передает:
[Fact]
public void UpdateState_StateHasBeenUpdated_HttpOk()
{
//arrange
var state = new RedisServiceModel();
var redisServiceMock = new Mock<IRedisService>();
redisServiceMock.Setup(x => x.UpdateStateAsync(It.Is<RedisServiceModel>(y => y == state))).ReturnsAsync(state);
var testController = new TestController(redisServiceMock.Object);
// act
var statusResult = testController.UpdateStates(state);
// assert
redisServiceMock.Verify(x => x.UpdateStateAsync(It.Is<RedisServiceModel>(y => y == state)));
Assert.True(statusResult.Result is HttpStatusCode.OK);
}
Вот HttpStatusCode.NotModified
который выдает исключение:
[Fact]
public void UpdateState_StateHasNotBeenModified_HttpNotModified()
{
//arrange
var state = new RedisServiceModel();
var redisServiceMock = new Mock<IRedisService>();
redisServiceMock.Setup(x => x.UpdateStateAsync(It.Is<RedisServiceModel>(y => y == state))).ReturnsAsync(state);
var testController = new TestController(redisServiceMock.Object);
// act
var statusResult = testController.UpdateStates(null);
// assert
redisServiceMock.Verify(x => x.UpdateStateAsync(It.Is<RedisServiceModel>(y => y == state)), Times.Once);
Assert.True(statusResult.Result is HttpStatusCode.NotModified);
}
Вот вызов API PUT
:
[HttpPut]
[Route("updatestates")]
public async Task<HttpStatusCode> UpdateStates(RedisServiceModel update)
{
RedisServiceModel updateState = await _redisService.UpdateStateAsync(update);
if (updateState != null)
{
return HttpStatusCode.OK;
}
return HttpStatusCode.NotModified;
}
Я предполагаю его, потому что я передаю null
здесь testController.UpdateStates(null)
, Я попытался обернуть все в методе UpdateStates
api, чтобы null
проверил аргумент update
, но это все равно привело к тому же исключению. Если вам понадобится код, дайте мне знать, и я отредактирую этот пост.