代理检查的单元测试
你可以很简单地获取机器的代理配置,方法是使用
def check_proxy():
import urllib2
http_proxy = urllib2.getproxies().get('http')
我需要为上面写的函数写一个测试。为了做到这一点,我需要:
- 在测试期间把系统的代理设置为一个无效的URL(这听起来像个坏主意)。
- 给http_proxy提供一个无效的URL。
我该怎么做才能实现以上任意一个呢?
2 个回答
1
getproxies的具体行为会根据你使用的系统有所不同,但我认为在所有情况下,它首先会查看环境变量,然后再检查系统特定的位置来获取代理设置(比如在Windows系统中会查看注册表)。
所以你可以试试:
os.environ['HTTP_PROXY'] = 'whatever invalid URL you want'
2
从问题的标签来看,我看到你想为这个函数写 单元测试。那么你的 单元在哪里呢?你的业务逻辑在哪里呢?getproxies
和 get
是标准Python库里的函数。你不应该在你的单元测试中测试别人的代码。此外,只需要测试那些可能会出问题的东西就足够了,具体可以参考可能出错的事情。
如果我误解了你的问题,实际上你的函数看起来像这样:
def check_proxy():
import urllib
http_proxy = urllib.getproxies().get('http')
# some “complex” code that uses http_proxy
而你不知道如何测试“复杂”的代码,因为它依赖于代理,我建议把这个函数拆分成两个:
def check_proxy():
import urllib
http_proxy = urllib.getproxies().get('http')
_check_proxy(http_proxy)
def _check_proxy(http_proxy):
# some “complex” code that uses http_proxy
现在你可以单独测试 _check_proxy
,使用你专门准备的任何模拟对象来充当 http_proxy
。为 _check_proxy
写几个测试,而把原来的 check_proxy
留不测(在 单元 测试的意义上)。这样也是可以的。