public async Task CachingTest() { var cacheRegion = "cacheRegion"; var serviceInfo = new CalledServiceInfo { Name = "Service", Id = Guid.NewGuid(), Endpoint = "Endpoint", CircuitBreakerInfo = new CircuitBreakerInfo { ExceptionCount = 1, BreakDuration = TimeSpan.FromMilliseconds(1) }, Timeout = TimeSpan.FromMilliseconds(100) }; var httpClientResponse = new HttpClientResponse { HttpStatusCode = HttpStatusCode.NoContent, Response = "" }; var cache = new CacheMock(); var httpClientWrapper = Substitute.For <IHttpClientWrapper>(); var tokenService = Substitute.For <ITokenService>(); httpClientWrapper.PostAsync(serviceInfo.Endpoint, null, CancellationToken.None).ReturnsForAnyArgs(httpClientResponse); var sut = new CachedService(cache, httpClientWrapper, tokenService); ServiceResponse actual = await sut.CallService(serviceInfo, cacheRegion, CancellationToken.None, null); Assert.AreEqual(ServiceResponseStatus.Success, actual.Status); actual = await sut.CallService(serviceInfo, cacheRegion, CancellationToken.None, null); Assert.AreEqual(ServiceResponseStatus.Success, actual.Status); await httpClientWrapper.ReceivedWithAnyArgs(1).PostAsync(serviceInfo.Endpoint, null, CancellationToken.None); bool semaphoresRemoved = sut.RemoveSemaphores(cacheRegion); Assert.IsTrue(semaphoresRemoved); }