Легко смоделированная среда HTTP-клиента для C # - PullRequest
4 голосов
/ 17 февраля 2009

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

Кто-нибудь здесь знает о легко смоделированной платформе HTTP-клиента?

Ps. Я обычно использую Moq для издевательств. Если вам известна какая-то бесплатная фреймворк-фреймворк, который будет лучше симулировать HTTP-запросы, это тоже было бы неплохо.

Ответы [ 4 ]

6 голосов
/ 17 февраля 2009

DotNetOpenId, проект с открытым исходным кодом, из которого вы можете повторно использовать код, использует классы-оболочки HTTP, через которые выполняются все вызовы. Во время тестирования вводится фиктивный обработчик HTTP, так что ответы могут быть программно установлены до вызова. У него есть другой режим, где он размещает свой собственный сайт ASP.NET, чтобы можно было использовать весь фактический стек.

Это работает хорошо, хотя оно не было извлечено как отдельное решение. Если вы заинтересованы в его повторном использовании, вот несколько ссылок на источник. И вы можете обратиться за помощью в его интеграции по адресу dotnetopenid@googlegroups.com.

Живи один: StandardWebRequestHandler.cs

Mocks: MockHttpRequest.cs , TestWebRequestHandler.cs

4 голосов
/ 19 февраля 2009

Я предлагаю вам использовать поддержку фреймворка для этого, т.е. System.Net.WebRequest.

Определите действительно простой интерфейс и простую оболочку для веб-запроса. Таким образом вы получите то, что вы хотите, и не добавите внешнюю зависимость для чего-то, что фреймворк уже делает хорошо.

1 голос
/ 21 октября 2017

Вы можете использовать WireMock.Net , которая представляет собой гибкую библиотеку для озвучивания и насмешек веб-HTTP-ответов с использованием критериев соответствия запросов.

И это также очень легко можно использовать в проектах для юнит-тестов. Проверьте вики для деталей.

NuGet найден здесь .

0 голосов
/ 17 февраля 2009

Я не думаю, что на самом деле существует какая-либо инфраструктура, которая обрабатывает вещи, которые вы хотите заархивировать. Ведь только вы знаете, что должен делать каждый запрос Http. Так что в основном у вас есть 2 варианта:

  1. Выполнение вызовов и использование фиктивной реализации на другой стороне. Это может быть простое консольное приложение, которое возвращает фиктивные данные. Если вам нужна дополнительная логика, я бы подумал об использовании объектной базы данных - на мой взгляд, они идеально подходят для этих приложений.
  2. Используйте макетную реализацию на стороне приложения. Если в этой реализации много логики, не используйте фальшивый фреймворк - создайте пользовательский фиктивный класс со всей логикой.

Надеюсь, это поможет

...