【问题标题】:Monkey patch an object from another module in PythonMonkey 修补 Python 中另一个模块的对象
【发布时间】:2020-08-04 11:21:46
【问题描述】:

我在模块 1 中有一个类,比如 foo。

    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_ 对象。测试是针对 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 中导入的对象的情况下工作?

【问题讨论】:

标签: python mocking pytest monkeypatching


【解决方案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'

【讨论】:

    猜你喜欢
    • 2014-03-22
    • 2017-05-24
    • 2013-11-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多