public TestContext(string path, Dictionary <string, string> query, Dictionary <string, string> form)
        {
            ResponseContentType = null;
            ResponseBuffer      = new List <string>();

            MockRequest = GetRequestForUrl(path, query, form);

            MockResponseHeaders = new Mock <IHeaderDictionary>();
            MockResponseHeaders.Setup(m => m.Append("X-Content-Type-Options", "nosniff"));

            var mockResponseBody = new Mock <Stream>();

            mockResponseBody.Setup(m => m.Write(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>()))
            .Callback <byte[], int, int>((buffer, offset, count) =>
                                         ResponseBuffer.Add(Encoding.UTF8.GetString(buffer, offset, count)));

            MockResponse = new Mock <HttpResponse>();
            MockResponse.SetupGet(m => m.Headers).Returns(MockResponseHeaders.Object);
            MockResponse.SetupGet(m => m.Body).Returns(mockResponseBody.Object);

            MockResponse.SetupSet(m => m.ContentType       = It.IsAny <string>())
            .Callback <string>(type => ResponseContentType = type);

            MockHttpContext = new Mock <HttpContext>();
            MockHttpContext.SetupGet(m => m.Response).Returns(MockResponse.Object);
            MockHttpContext.SetupGet(m => m.Request).Returns(MockRequest.Object);
            MockHttpContext.SetupGet(m => m.RequestAborted).Returns(CancellationToken.None);

            MockRequest.SetupGet(m => m.HttpContext).Returns(MockHttpContext.Object);
            MockResponse.SetupGet(m => m.HttpContext).Returns(MockHttpContext.Object);
        }