一尘不染

像urllib这样的模拟/存根python模块如何

python

我需要测试一个函数,该函数需要使用urllib.urlopen(它也使用urllib.urlencode)来查询外部服务器上的页面。服务器可能已关闭,页面可能已更改;我不能依靠它进行测试。

控制urllib.urlopen返回的最佳方法是什么?


阅读 137

收藏
2020-12-20

共1个答案

一尘不染

另一个简单的方法是让您的测试覆盖urllib的urlopen()功能。例如,如果您的模块具有

import urllib

def some_function_that_uses_urllib():
    ...
    urllib.urlopen()
    ...

您可以这样定义测试:

import mymodule

def dummy_urlopen(url):
    ...

mymodule.urllib.urlopen = dummy_urlopen

然后,当您的测试调用中的函数时mymoduledummy_urlopen()将调用而不是real
urlopen()。像Python这样的动态语言,使测试方法和类的存根非常容易。

请参阅我的博客文章,网址http://softwarecorner.wordpress.com/,以获取有关测试依赖项的更多信息。

2020-12-20