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?