不确定这是否理想,但如果我理解您的问题,您确实在寻找集成测试以确保某个 URI 可用。您并不是真的要对服务的实现进行单元测试——您想向 URI 发出请求并检查响应。
这是我设置用来运行它的 NUnit TestFixture。请注意,这很快就完成了,绝对可以改进......
我使用 WebRequest 对象发出请求并返回响应。发出请求时,它被包裹在 try...catch 中,因为如果请求返回的响应不是 200 类型的响应,它将抛出 WebException。所以我捕获了异常并从异常的Response 属性中获取WebResponse 对象。我在那时设置了我的 StatusCode 变量并继续评估返回的值。
希望这会有所帮助。如果我误解了您的问题,请告诉我,我会相应地更新。祝你好运!
测试代码:
[TestFixture]
public class WebRequestTests : AssertionHelper
{
[TestCase("http://www.cnn.com", 200)]
[TestCase("http://www.foobar.com", 403)]
[TestCase("http://www.cnn.com/xyz.htm", 404)]
public void when_i_request_a_url_i_should_get_the_appropriate_response_statuscode_returned(string url, int expectedStatusCode)
{
var webReq = (HttpWebRequest)WebRequest.Create(url);
webReq.Method = "GET";
HttpWebResponse webResp;
try
{
webResp = (HttpWebResponse)webReq.GetResponse();
//log a success in a file
}
catch (WebException wexc)
{
webResp = (HttpWebResponse)wexc.Response;
//log the wexc.Status and other properties that you want in a file
}
HttpStatusCode statusCode = webResp.StatusCode;
var answer = webResp.GetResponseStream();
var result = string.Empty;
if (answer != null)
{
using (var tempStream = new StreamReader(answer))
{
result = tempStream.ReadToEnd();
}
}
Expect(result.Length, Is.GreaterThan(0), "result was empty");
Expect(((int)statusCode), Is.EqualTo(expectedStatusCode), "status code not correct");
}
}