Я пишу модульный тест для веб-службы WCF. Я намеренно отправляю неверный запрос на сервер, который выбрасывает WebExceptionFault<string>
. В модульном тесте исключение, которое получено, представляет собой EndpointNotFoundException
со стандартом WebException
в свойстве InnerException
. Я хочу убедиться, что тело ответа соответствует строке, которая, по моему мнению, должна быть там.
Однако я сталкиваюсь с проблемой, так как свойство Response
WebException
(то есть System.Net.SyncMemoryStream
) удалено и не может быть прочитано.
Мой код:
Clubs actual;
try
{
//"201" is an invalid argument for the first parameter
actual = new Clubs(channel.GetClubs("201", "123"));
}
catch (EndpointNotFoundException e)
{
WebException w = e.InnerException as WebException;
Assert.IsNotNull(w);
HttpWebResponse resp = w.Response as HttpWebResponse;
Assert.IsNotNull(resp);
Assert.AreEqual(resp.StatusCode, HttpStatusCode.NotFound);
//Next line throws an ArgumentException saying Stream not readable
//Investigation shows it has been disposed
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
Assert.AreEqual(sr.ReadToEnd(), "League not allowed for selected club");
}
Это нормально, что свойства InnerException расположены? Есть ли способ обойти это?