2012-08-12 4 views
1

В Python я создал метод, который читает содержимое веб-страницы и делает некоторые вещи с содержимым.Assign Mock Variable Value in Unit Test

Я хочу, чтобы модуль тестировал метод с использованием определенного http-адреса, но я не хочу назначать адрес вручную в своем производственном коде, а затем проверять его. Поэтому в идеале я хочу создать какой-то макет объекта (используя библиотеку Mock), который принимает значение http-адреса, которое мне нужно, чтобы я мог выполнить свой тест с этим значением.

В качестве примечания, целью теста является проверка того, что мой код вызывает правильное исключение с проверенным адресом http.

Таким образом, чтобы показать, код я хочу проверить, имеет следующий вид:

Class A 

    method1() 

     var1 = "wwww.something.com" 
     read contents at address var1 
     do stuff with contents (raise error if bad contents) 

И я хочу, чтобы проверить код с var1 = «wwww.somethingelse.com» в моем тестовом модуле (в идеале, используя библиотека Mock).

Цените любую помощь.

ответ

1

Если ваш метод не принимает никаких параметров, как может быть передан недопустимый URI? Вы должны проверить свой метод, передав в URI, который, как ожидается, вызовет поведение, которое вы хотите проверить. Для этого не потребуется использовать mock.

Что бы требуют издеваться, если бы это было специально тестовый модуль, в этом случае вы, вероятно, хотите, чтобы дразнить из весь блок кода, который делает запросы в сети, (скажем, urllib2.urlopen) с чем-то, что вместо этого просто не выполняет никакой сетевой активности, а вместо этого отбрасывает все содержимое или HTTP-ошибку, которые вы хотите протестировать.

В качестве примечания, совершенно разумно (и целесообразно) структурировать ваш фактический производственный код таким образом, чтобы сделать его более проверяемым.

+0

спасибо. На самом деле мой метод принимает несколько параметров, которые используются для построения ссылки. Итак, если бы я хотел смоделировать HTTP-ошибку, как бы я это сделал? – jule64

+0

Вы должны использовать декоратор ['mock.patch'] (http://www.voidspace.org.uk/python/mock/patch.html#mock.patch) для исправления' yourmodule.urllib2.urlopen', скажем , с макетом, чья 'side_effect = urllib2.HTTPError (что угодно, args, you, want, for, it)'. – Julian

+0

получил это, большое спасибо – jule64