猴子从 Python 中的另一个模块修补一个对象
Monkey patch an object from another module in Python
我有一个 class,比如 foo,在模块 1 中。
class foo():
def __init__(var1, var2):
self.var1 = var1
self.var2 = var2
def method1(self):
pass
def method2(self):
pass
foo_ = foo("blah", "blah")
foo_ 对象广泛用于代码库中的各种模块。我必须为模块 2 中使用 foo_ 对象的方法编写测试。
模块 2:
from module1 import foo_
import module3
def blah():
foo_.method1()
module3.random_method()
return blah
模块3中的random_method也引入并调用了foo_的另一个方法。我的测试中有一个虚拟的 foo_ 对象 module.The 测试是针对 blah 方法的。这是我到目前为止的内容。
测试模块:
from module1 import foo
from module2 import blah
@pytest.fixture()
def dummy_foo_():
var1 = 'blah'
var2 = 'blah'
return foo(var1,var2)
def test_blah(dummy_foo_):
assert blah() == 'blah'
有没有办法让 test_blah 在 blah 方法使用虚拟 foo_ 对象而不是模块 1 中导入的对象的地方工作?
您可以使用 mock.patch
将 module1.foo_
临时修补为 dummy_foo_
,方法是将其用作上下文管理器
from mock import patch
def test_blah(dummy_foo_):
with patch('module1.foo_', dummy_foo_) as mock:
assert blah() == 'blah'
我有一个 class,比如 foo,在模块 1 中。
class foo():
def __init__(var1, var2):
self.var1 = var1
self.var2 = var2
def method1(self):
pass
def method2(self):
pass
foo_ = foo("blah", "blah")
foo_ 对象广泛用于代码库中的各种模块。我必须为模块 2 中使用 foo_ 对象的方法编写测试。
模块 2:
from module1 import foo_
import module3
def blah():
foo_.method1()
module3.random_method()
return blah
模块3中的random_method也引入并调用了foo_的另一个方法。我的测试中有一个虚拟的 foo_ 对象 module.The 测试是针对 blah 方法的。这是我到目前为止的内容。
测试模块:
from module1 import foo
from module2 import blah
@pytest.fixture()
def dummy_foo_():
var1 = 'blah'
var2 = 'blah'
return foo(var1,var2)
def test_blah(dummy_foo_):
assert blah() == 'blah'
有没有办法让 test_blah 在 blah 方法使用虚拟 foo_ 对象而不是模块 1 中导入的对象的地方工作?
您可以使用 mock.patch
将 module1.foo_
临时修补为 dummy_foo_
,方法是将其用作上下文管理器
from mock import patch
def test_blah(dummy_foo_):
with patch('module1.foo_', dummy_foo_) as mock:
assert blah() == 'blah'