Модульный тест на метод, который берет объект HttpResponse в качестве параметра. OutputStream не доступен

лампа Quicklist

enter image description here

1. Откройте новый файл:

gedit ~/.local/share/applications/lamp.desktop

2. Скопируйте текст ниже

[Desktop Entry]
Name=LAMP
GenericName=LAMP
X-GNOME-FullName=LAMP
Comment=Open services of your LAMP server
Exec=gksu service apache2 start && gksu service mysql start
Icon=emblem-web
Terminal=false
Type=Application
StartupNotify=true

X-Ayatana-Desktop-Shortcuts=Start;Stop;Restart


[Start Shortcut Group]
Name=Start
Exec=gksu service apache2 start && gksu service mysql start
TargetEnvironment=Unity

[Stop Shortcut Group]
Name=Stop
Exec=gksu service apache2 stop && gksu service mysql stop
TargetEnvironment=Unity

[Restart Shortcut Group]
Name=Restart
Exec=gksu service apache2 restart && gksu service mysql restart
TargetEnvironment=Unity

3. Перетаскивание на средство запуска путем навигации к ~/.local/share/applications/в Наутилусе. [или можно просто перетащить отбрасывание путем поиска ЛАМПЫ в тире]

8
задан Daniel Mann 18 February 2016 в 15:26
поделиться

5 ответов

Необходимо использовать пространство имен System.Web.Abstractions

В частности, возьмите HttpResponseBase ( http://msdn.microsoft.com/en-us/library/system. web.httpresponsebase.aspx ) в качестве входного параметра вместо HttpResponse. Затем вы можете издеваться над HttpResponseBase из своих тестов. Если у вас есть реальный HttpResponse для передачи, используйте HttpResponseWrapper для создания HttpResponseBase.

12
ответ дан 5 December 2019 в 08:53
поделиться

Чтобы быть по-настоящему единым, вы должны имитировать HttpResponse и все остальное только для тестирования кода ваших методов. Я не знаю ни одной имитирующей утилиты C #, но этот вопрос может помочь .

Затем вы можете сделать что-то вроде этого (пример - Java с Mockito):

HttpResponse response = mock(HttpResponse.class);
OutputStream outputStream = mock(OutputStream.class);
when(response.getOutputStream()).thenReturn(outputStream); 

RssGenerator.generate(response, otherParameters);

Конечно, вам, вероятно, понадобится чтобы сконфигурировать ваш макет более подробно, но вы поняли общую идею.

3
ответ дан 5 December 2019 в 08:53
поделиться

Конструктор для HttpResponse не предназначен для вашего использования, он используется только для цикла страниц ASP.NET, поэтому документации по созданию 1.

Вы должны настроить объект HttpResponse так, чтобы он использовал HttpWriter , иначе он не позволит вам получить доступ к базовому потоку. Однако конструктор установил для переменной _httpWriter значение null , поэтому вам нужно найти другой способ установить его.

Вы можете использовать .NET Reflector ], чтобы изучить класс HttpResponse и посмотреть, что он делает.

1
ответ дан 5 December 2019 в 08:53
поделиться

Итак, проблема с Mocking HttpResponse заключается в том, что он запечатан, поэтому вы не можете его расширить (и большинство имитирующих фреймворков, которые Mock-конкретные классы просто перезаписывают виртуальные методы). Microsoft также была достаточно любезна, чтобы не предоставить интерфейсы для большинства из них ... так что спасибо MS.

По этой причине (среди прочего) я обычно заканчиваю писать свои собственные интерфейсы для всех запечатанных классов MS, а затем пишу реализации оболочек, которые возьмите класс MS в конструкторе и как можно скорее включите их в запрос. Затем вы можете создавать макеты интерфейсов и заставлять их делать все, что вам нравится.

1
ответ дан 5 December 2019 в 08:53
поделиться

Если бы я не смог провести рефакторинг сигнатуры метода (возможно, методу действительно нужно только одно значение из HttpResponse?), Я бы заставил Eclipse сгенерировать нулевую реализацию HttpResponse (да, я в Java, но это та же идея) - т.е. реализует все методы, возвращающие ноль - и просто заполните только те, которые мне нужны в тестируемом методе, и попросите их вернуть некоторые постоянные значения. (Да, тоже можно использовать какой-нибудь фреймворк.)

Причина, по которой вы не можете создать свой собственный экземпляр существующей реализации, заключается в том, что он будет сильно привязан к вашему серверу приложений и, вероятно, потребует всевозможных другой мусор для создания экземпляра.

Если выяснится, мне нужно что-то более сложное, чем простая нулевая версия HttpResponse,

0
ответ дан 5 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: