модульный тест для проверки прокси - PullRequest
0 голосов
/ 11 апреля 2010

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

def check_proxy():    
     import urllib2
     http_proxy = urllib2.getproxies().get('http')

Мне нужно написать тест для написанной выше функции. Для этого мне нужно: -

  1. Установите общесистемный прокси на неверный URL во время теста (звучит как плохая идея).
  2. Предоставить недействительный URL к http_proxy.

Как мне достичь чего-либо из перечисленного?

Ответы [ 2 ]

2 голосов
/ 12 апреля 2010

Глядя на теги вопросов, я вижу, что вы хотите написать unit-тесты для этой функции. И где здесь ваша единица? Где ваша бизнес-логика? getproxies и get являются функциями стандартной библиотеки Python. Вы не должны проверять чужой код в своих юнит-тестах. Кроме того, этого достаточно, чтобы протестировать только вещей, которые могли бы сломаться .

Если я неправильно понял ваш вопрос и действительно ваша функция выглядит следующим образом:

def check_proxy():    
     import urllib
     http_proxy = urllib.getproxies().get('http')
     # some “complex” code that uses http_proxy

и вы не знаете, как проверить «сложный» код из-за зависимости от прокси-сервера, я рекомендую разделить функцию на две части:

def check_proxy():    
     import urllib
     http_proxy = urllib.getproxies().get('http')
     _check_proxy(http_proxy)

def _check_proxy(http_proxy):
     # some “complex” code that uses http_proxy

Теперь вы можете протестировать _check_proxy в одиночку, используя любой макет / заглушку, специально подготовленный для роли http_proxy. Напишите несколько тестов для _check_proxy и оставьте исходные check_proxy непроверенными (в смысле unit -test). Это нормально.

1 голос
/ 11 апреля 2010

Точное поведение getproxies варьируется в зависимости от системы, в которой вы работаете, но я считаю, что во всех случаях он сначала смотрит в среде, а затем проверяет место в настройках прокси-сервера (например, реестр в Windows). 1001 *

Так что попробуйте:

os.environ['HTTP_PROXY'] = 'whatever invalid URL you want'
...