Я видел следующие вопросы уже:Как протестировать модульный код, который зависит от HttpWebRequest и HttpWebResponse?
Они не помогают мне, потому что мне нужно:
- Чтобы проверить существующий код который использует
WebRequest
/WebResponse
напрямую, без интерфейсов - Существующий код зависит от
HttpWebRequest
/HttpWebResponse
, поэтому я не могу использовать свои собственные классыWebRequest
иWebResponse
.
Я знаю о WebRequest.RegisterPrefix
и успешно прошел единичный тест, который доказывает, что он работает (как только вы получите префикс справа). Но этот тест просто проверяет WebRequest
и WebResponse
.
Я попытался следующие, но это дает ошибку компиляции (а не предупреждение):
public class MockWebRequest : HttpWebRequest
{
public MockWebRequest()
// : base(new SerializationInfo(typeof (HttpWebRequest), new FormatterConverter()),
// new StreamingContext())
{
}
}
С двумя линиями закомментированный, я получаю ошибку компиляции:
error CS0619: 'System.Net.HttpWebRequest.HttpWebRequest()' is obsolete: 'This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.'
Когда Я раскомментируйте эти строки, я получаю 618 предупреждение, но код сбой во время выполнения:
System.Runtime.Serialization.SerializationException: Member '_HttpRequestHeaders' was not found.
at System.Runtime.Serialization.SerializationInfo.GetElement(String name, Type& foundType)
at System.Runtime.Serialization.SerializationInfo.GetValue(String name, Type type)
at System.Net.HttpWebRequest..ctor(SerializationInfo serializationInfo, StreamingContext streamingContext)
at UnitTests.MockWebRequest..ctor(String responseJson)
at UnitTests.MockWebRequestCreator.Create(Uri uri)
at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
at System.Net.WebRequest.Create(Uri requestUri)
at code under test
Я в недоумении о ч ow для продолжения этого (кроме значения по умолчанию, которое нужно просто провести на этих модульных тестах и пожелать, чтобы код был реализован с учетом тестирования).
я мог бы получить «вниз и грязной» и сделать что-нибудь неприятное с ISerializable
, или что-то в этом роде, но это вызывает третье требование:
3.
Код должен быть ремонтопригодны, и не должно быть слишком много более сложный, чем тестируемый код!
OBTW, я не могу использовать TypeMock для этого, и на самом деле есть немного ограничения по времени. Проект почти завершен, так что новая, купленная издевательская структура не может быть и речи.
К сожалению, для 'HttpWebRequest' нет эквивалента' HttpContextBase'. Нет класса 'HttpWebRequestBase'. –
Хорошо. Я добавил еще один подход, который я иногда использую – TGH
. Я боюсь, что это тоже не поможет. Как я уже сказал в вопросе, я не могу вносить изменения в тестируемый код. –