Накрыть модульным тестом WebRequest c # - PullRequest
0 голосов
/ 27 апреля 2018
public void HandleRequest(WebhookModel model)
{
        var strRequest = "cmd=_notify-validate&" + ipnContext.RequestBody;
        var webRequest = FormRequest(strRequest);
        var requestStream = _webRequestWrapper.GetRequestStream();
        var responseStream = _webRequestWrapper.GetResponse().GetResponseStream();

            using (StreamReader reader = new StreamReader(responseStream))
            {
                model.Verification = reader.ReadToEnd();
            }

}

private WebRequest FormRequest(string strRequest)
        {
            var webRequest = WebRequest.Create("some url is over here");

            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.ContentLength = strRequest.Length;

            return webRequest;
        }

Где _webrequestWrapper просто обёртка вокруг WebRequest класса. Итак, мой вопрос, как я могу издеваться _webRequestWrapper.GetResponse().GetResponseStream()? Проблема в том, что нет проблем с макетом GetResponse(), потому что мы создаем для него обертку вокруг WebRequest, но проблема в GetReponseStream, потому что он возвращает объект Stream, как я могу протестировать метод HandleRequest()? У меня действительно нет никаких идей об этом. Пожалуйста, помогите мне. Спасибо

1 Ответ

0 голосов
/ 27 апреля 2018

Я не вижу ничего достойного тестирования в HandleRequest(WebhookModel model).

Единственное, что делает ваш код, это model.Verification = reader.ReadToEnd();, поэтому вы будете проверять, можете ли вы установить свойство для объекта. Я почти уверен, что это сработает в большинстве случаев.

Любые проблемы, с которыми вы сталкиваетесь с WebRequest и связанными с ними классами ввода / вывода, вероятно, должны решаться с использованием блоков try / catch.

Модульные тесты хороши для бизнес-логики или общих предположений о входах и выходах и должны быть довольно просты в создании и обслуживании. Если вы тратите много времени на моделирование классов ввода / вывода, подумайте, можно ли разбить тестируемые единицы работы на отдельные (предпочтительно статические) методы. Вы сделаете свою жизнь и жизнь коллег более легкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...