Ada*_*kin 6 python monkeypatching
我有一个带有函数(调用它a())的模块,它调用在同一模块中定义的另一个函数(调用它__b()). __b()是一个通过网站说话urllib2并获取一些数据的功能.现在我正在尝试测试a(),但当然不希望我的单元测试与公共互联网对话.因此,我在想,如果我可以__b()使用返回固定数据的函数来修补补丁,那么我可以编写测试a().
更具体一点,我的模块看起来有点像:
def a():
return __b("someval")
def __b(args):
return something_complex_with_args
Run Code Online (Sandbox Code Playgroud)
所以现在我想测试a(),但我需要修补__b.问题是A)关于猴子补丁的绝大多数信息适用于类的方法,而不适用于模块中的函数,以及B)我想要猴子补丁的函数是私有的.__b如果它使这个过程更可行,我愿意改为非私人,但不愿意.
建议?
编辑:因为它代表测试类看起来像:
from unittest import TestCase
import mymodule
def newfn(args):
return {"a" : "b"}
mymodule._b = newfn
class TestMyModule(TestCase):
def test_basic(self):
print(mymodule.a('somearg'))
Run Code Online (Sandbox Code Playgroud)
当我运行它时,如果没有完成猴子修补,我会看到输出,而不是看到{'a': 'b'}打印出来.
如果您的模块名为“foo”,则以下内容应该有效。
import foo
def patched_version():
return 'Hello'
foo.__b = patched_version
print (foo.a())
Run Code Online (Sandbox Code Playgroud)
foo.py 在哪里
def a():
return __b()
def __b():
return 'Goodbye'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3618 次 |
| 最近记录: |