我需要测试一个函数,该函数需要使用urllib.urlopen(它也使用urllib.urlencode)来查询外部服务器上的页面。服务器可能已关闭,页面可能已更改;我不能依靠它进行测试。
控制urllib.urlopen返回的最佳方法是什么?
另一个简单的方法是让您的测试覆盖urllib的urlopen()功能。例如,如果您的模块具有
urlopen()
import urllib def some_function_that_uses_urllib(): ... urllib.urlopen() ...
您可以这样定义测试:
import mymodule def dummy_urlopen(url): ... mymodule.urllib.urlopen = dummy_urlopen
然后,当您的测试调用中的函数时mymodule,dummy_urlopen()将调用而不是real urlopen()。像Python这样的动态语言,使测试方法和类的存根非常容易。
mymodule
dummy_urlopen()
请参阅我的博客文章,网址为http://softwarecorner.wordpress.com/,以获取有关测试依赖项的更多信息。