public async Task UriAndResponse_For_Single_Response()
        {
            // Arrange
            const HttpStatusCode statusCode = HttpStatusCode.Accepted;
            var testObj        = GetTestObjects(1).First();
            var testUri        = Random.GetUri();
            var response       = GetResponse(statusCode, testObj);
            var uriAndResponse = new RequestConditionalUriAndResponse(testUri,
                                                                      response,
                                                                      request => request.Method == HttpMethod.Post);
            var client = GetTestClient(uriAndResponse);

            // Act
            // - should return NotImplemented because it's a GET request
            var result = await client.GetAsync(testUri);

            // Assert
            result.StatusCode.Should().Be(HttpStatusCode.NotImplemented);

            // Act
            // - should return expected result because it's a POST request
            result = await client.PostAsync(testUri, new StringContent(String.Empty));

            // Assert
            result.StatusCode.Should().Be(statusCode);
            var resultObj = JsonConvert.DeserializeObject <TestClass>(await result.Content.ReadAsStringAsync());

            testObj.Equals(resultObj).Should().BeTrue();
        }
        public async Task UriAndResponse_For_Multiple_Responses()
        {
            // Arrange
            const HttpStatusCode statusCode0 = HttpStatusCode.Accepted;
            var testObj0        = GetTestObjects(1).First();
            var testUri0        = Random.GetUri();
            var response0       = GetResponse(statusCode0, testObj0);
            var uriAndResponse0 = new RequestConditionalUriAndResponse(testUri0,
                                                                       response0,
                                                                       request => request.Method == HttpMethod.Get);

            const HttpStatusCode statusCode1 = HttpStatusCode.Accepted;
            var testObj1        = GetTestObjects(1).First();
            var testUri1        = Random.GetUri();
            var response1       = GetResponse(statusCode1, testObj1);
            var uriAndResponse1 = new RequestConditionalUriAndResponse(testUri1,
                                                                       response1,
                                                                       request => request.Method == HttpMethod.Post);
            var client = GetTestClient(uriAndResponse0, uriAndResponse1);

            // Act
            var result = await client.GetAsync(testUri0);

            // Assert
            result.StatusCode.Should().Be(statusCode0);
            var resultObj = JsonConvert.DeserializeObject <TestClass>(await result.Content.ReadAsStringAsync());

            testObj0.Equals(resultObj).Should().BeTrue();

            // Act
            result = await client.PostAsync(testUri1, new StringContent(String.Empty));

            // Assert
            result.StatusCode.Should().Be(statusCode0);
            resultObj = JsonConvert.DeserializeObject <TestClass>(await result.Content.ReadAsStringAsync());
            testObj1.Equals(resultObj).Should().BeTrue();
        }