Самый простой способ - изменить свою функцию, чтобы она не обязательно использовала urllib.urlopen. Допустим, это ваша оригинальная функция:
def my_grabber(arg1, arg2, arg3):
# .. do some stuff ..
url = make_url_somehow()
data = urllib.urlopen(url)
# .. do something with data ..
return answer
Добавьте аргумент, который является функцией, используемой для открытия URL. Затем вы можете предоставить фиктивную функцию, чтобы сделать все, что вам нужно:
def my_grabber(arg1, arg2, arg3, urlopen=urllib.urlopen):
# .. do some stuff ..
url = make_url_somehow()
data = urlopen(url)
# .. do something with data ..
return answer
def test_my_grabber():
my_grabber(arg1, arg2, arg3, urlopen=my_mock_open)