public async Task Test_Previous_Valid_Comic_When_Current_Is_Not_First() { //Arrange int mockId = 406; int previousValidId = 403; var mockComicApi = new Mock <IXKCDApi>(); mockComicApi.Setup(api => api.GetFirstComicId()) .ReturnsAsync(GetValidMockedFirstComicId()); mockComicApi.Setup(api => api.GetComicOfTheDay()) .ReturnsAsync(GetValidMockedComicOfTheDay()); mockComicApi.Setup(api => api.GetComicById(404)) .ReturnsAsync(GetInvalidComic()); mockComicApi.Setup(api => api.GetComicById(405)) .ReturnsAsync(GetInvalidComic()); mockComicApi.Setup(api => api.GetComicById(previousValidId)) .ReturnsAsync(GetMockedComicById(previousValidId)); var comicRepository = new ComicRepository(mockComicApi.Object); //Act var result = await comicRepository.GetPreviousComicId(mockId); var previousComic = await comicRepository.GetComicById(previousValidId); //Assert Assert.NotNull(result); Assert.Equal(previousValidId, result); Assert.NotNull(previousComic); Assert.Equal(previousComic.Num, result); Assert.Equal($"Testing {result.Value}", previousComic.Alt); Assert.Equal($"Test comic {result.Value}", previousComic.SafeTitle); Assert.Equal($"Test comic {result.Value}", previousComic.Title); mockComicApi.Verify(mock => mock.GetComicById(mockId - 1), Times.Once()); mockComicApi.Verify(mock => mock.GetComicById(mockId - 2), Times.Once()); //Because of the fetch during the act mockComicApi.Verify(mock => mock.GetComicById(previousValidId), Times.Exactly(2)); mockComicApi.Verify(mock => mock.GetComicById(mockId - 4), Times.Never()); }