我正在做一个项目,如果我可以urlopen
在测试期间模拟出来,那将非常方便。有人向我指出,通过模拟opener
和使用urllib2.install_opener
.
但是,由于文档中的此注释,我很担心:
安装一个 OpenerDirector 实例作为默认的全局开启器。
这是否意味着如果我依赖的其他代码正在使用我的程序可能会意外中断urlopen
?
我正在做一个项目,如果我可以urlopen
在测试期间模拟出来,那将非常方便。有人向我指出,通过模拟opener
和使用urllib2.install_opener
.
但是,由于文档中的此注释,我很担心:
安装一个 OpenerDirector 实例作为默认的全局开启器。
这是否意味着如果我依赖的其他代码正在使用我的程序可能会意外中断urlopen
?
影响正是您所期望的。程序中的所有后续调用urllib2.urlopen
,直到您退出或install_opener
再次调用,都将使用您的开启程序。
这是否“危险”取决于您的用例。如果您的代码还有其他部分正在使用urllib2.open
并且您不希望它们被模拟,那么是的,这是一个坏主意,因为它们将被模拟。
在这种情况下,您将不得不调用要模拟的代码my_opener.open
而不是urllib2.open
. 如果您设计要测试的代码,这应该很容易。如果你事后需要monkeypatch代码,这有点棘手,但有各种可能性。例如,如果你想模拟给定模块中的所有调用,只需替换foomodule.urllib2 = my_opener
和设置my_opener.urlopen = my_opener.open
。