public void SendGetRequestTest() { // Arrange. const string Url = "http://example.com/TestService"; const string QueryString = "param1=Value1¶m2=Value2"; const string ParamName1 = "Param1"; const string ParamValue1 = "Test Value"; const string ParamName2 = "Param2"; const string ParamValue2 = "!@#$%^&*()_[]{};:'\",<.>/?"; var requestSender = new HttpRequestSender(); var request = new UrlServiceCallRequest { Url = Url }; request.ParameterValues.Add(new UrlServiceCallParameterValue { Name = ParamName1, Value = ParamValue1 }); request.ParameterValues.Add(new UrlServiceCallParameterValue { Name = ParamName2, Value = ParamValue2 }); var webRequest1 = Mock.Create<HttpWebRequest>(); var webRequest2 = Mock.Create<HttpWebRequest>(); Mock.Arrange(() => WebRequest.Create(Arg.IsAny<Uri>())).Returns( (Uri uri) => { if (uri.OriginalString == "http://example.com:80/TestService?Param1=Test+Value&Param2=!%40%23%24%25%5e%26*()_%5b%5d%7b%7d%3b%3a%27%22%2c%3c.%3e%2f%3f") return webRequest1; if (uri.OriginalString == "http://example.com:80/TestService?param1=Value1¶m2=Value2") return webRequest2; return null; }); var webResponse1 = Mock.Create<HttpWebResponse>(); Mock.Arrange(webRequest1, r => r.GetResponse()).Returns(webResponse1); var webResponse2 = Mock.Create<HttpWebResponse>(); Mock.Arrange(webRequest2, r => r.GetResponse()).Returns(webResponse2); // Act. requestSender.SendGetRequest(request); requestSender.SendGetRequest(Url, QueryString); // Assert. Assert.AreEqual("GET", webRequest1.Method); Assert.AreEqual(HttpVersion.Version11, webRequest1.ProtocolVersion); Assert.IsTrue(webRequest1.UseDefaultCredentials); Assert.AreEqual("application/x-www-form-urlencoded", webRequest1.ContentType); Mock.Assert(() => webResponse1.Dispose(), Occurs.Once()); Assert.AreEqual("GET", webRequest2.Method); Assert.AreEqual(HttpVersion.Version11, webRequest2.ProtocolVersion); Assert.IsTrue(webRequest2.UseDefaultCredentials); Assert.AreEqual("application/x-www-form-urlencoded", webRequest2.ContentType); Mock.Assert(() => webResponse2.Dispose(), Occurs.Once()); // Excetions. TestsHelper.VerifyThrow<ArgumentNullException>(() => requestSender.SendGetRequest(null)); }
public void SendPostRequestTest() { // Arrange. const string Url1 = "http://example.com/TestService1"; const string Url2 = "http://example.com/TestService2"; const string Content = "param1=Value1¶m2=Value2"; const string ParamName1 = "Param1"; const string ParamValue1 = "Test Value"; const string ParamName2 = "Param2"; const string ParamValue2 = "!@#$%^&*()_[]{};:'\",<.>/?"; var requestSender = new HttpRequestSender(); var request = new UrlServiceCallRequest { Url = Url1 }; request.ParameterValues.Add(new UrlServiceCallParameterValue { Name = ParamName1, Value = ParamValue1 }); request.ParameterValues.Add(new UrlServiceCallParameterValue { Name = ParamName2, Value = ParamValue2 }); var webRequest1 = Mock.Create<HttpWebRequest>(); var webRequest2 = Mock.Create<HttpWebRequest>(); Mock.Arrange(() => WebRequest.Create(Arg.IsAny<Uri>())).Returns( (Uri uri) => { if (uri.ToString() == Url1) return webRequest1; if (uri.ToString() == Url2) return webRequest2; return null; }); var stream1 = new MemoryStream(); Mock.Arrange(webRequest1, r => r.GetRequestStream()).Returns(stream1); var stream2 = new MemoryStream(); Mock.Arrange(webRequest2, r => r.GetRequestStream()).Returns(stream2); var webResponse1 = Mock.Create<HttpWebResponse>(); Mock.Arrange(webRequest1, r => r.GetResponse()).Returns(webResponse1); var webResponse2 = Mock.Create<HttpWebResponse>(); Mock.Arrange(webRequest2, r => r.GetResponse()).Returns(webResponse2); // Act. requestSender.SendPostRequest(request); requestSender.SendPostRequest(Url2, Content); var bytes1 = stream1.ToArray(); var bytes2 = stream2.ToArray(); // Assert. Assert.AreEqual("POST", webRequest1.Method); Assert.AreEqual(HttpVersion.Version11, webRequest1.ProtocolVersion); Assert.IsTrue(webRequest1.UseDefaultCredentials); Assert.AreEqual("application/x-www-form-urlencoded", webRequest1.ContentType); Assert.AreEqual(bytes1.Length, webRequest1.ContentLength); Mock.Assert(() => webResponse1.Dispose(), Occurs.Once()); Assert.AreEqual( "Param1=Test+Value&Param2=!%40%23%24%25%5e%26*()_%5b%5d%7b%7d%3b%3a%27%22%2c%3c.%3e%2f%3f", Encoding.UTF8.GetString(bytes1)); Assert.AreEqual("POST", webRequest2.Method); Assert.AreEqual(HttpVersion.Version11, webRequest2.ProtocolVersion); Assert.IsTrue(webRequest2.UseDefaultCredentials); Assert.AreEqual("application/x-www-form-urlencoded", webRequest2.ContentType); Assert.AreEqual(bytes2.Length, webRequest2.ContentLength); Mock.Assert(() => webResponse2.Dispose(), Occurs.Once()); Assert.AreEqual("param1=Value1¶m2=Value2", Encoding.UTF8.GetString(bytes2)); // Exceptions. TestsHelper.VerifyThrow<ArgumentNullException>(() => requestSender.SendPostRequest(null)); }