The simplest way is to change your function so that it doesn't necessarily use urllib.urlopen. Let's say this is your original function:
def my_grabber(arg1, arg2, arg3):
# .. do some stuff ..
url = make_url_somehow()
data = urllib.urlopen(url)
# .. do something with data ..
return answer
Add an argument which is the function to use to open the URL. Then you can provide a mock function to do whatever you need:
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)
requests
: How can I mock requests and the response? – Solidary