Не уверен, что это идеально, но если я понимаю ваш вопрос, вы действительно ищете интеграционный тест, чтобы убедиться, что определенный URI доступен. Вы не хотите проводить модульное тестирование реализации службы - вы хотите сделать запрос к URI и проверить ответ.
Вот NUnit TestFixture
, который я настроил для запуска этого. Обратите внимание, что это было сделано довольно быстро и, безусловно, может быть улучшено ....
Я использовал объект WebRequest, чтобы сделать запрос и получить ответ обратно. Когда запрос сделан, он заключен в try...catch
, потому что, если запрос возвращает что-либо, кроме ответа типа 200, он выдаст исключение WebException. Поэтому я ловлю исключение и получаю объект WebResponse
из свойства Response
исключения. Я установил свою переменную 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");
}
}