簡體   English   中英

猴子從 Python 中的另一個模塊修補 object

[英]Monkey patch an object from another module in Python

我在模塊 1 中有一個 class,比如 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_object 廣泛用於代碼庫中的各種模塊。 我必須為模塊 2 中使用 foo_ object 的方法編寫測試。

模塊 2:

from module1 import foo_
import module3
def blah():
   foo_.method1()
   module3.random_method()
   return blah

模塊 3 中的 random_method 也導入並調用了 foo_ 的另一個方法。 我的測試模塊中有一個虛擬 foo_ object。測試是針對 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_ object 而不是模塊 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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM