Обезьяна исправляет объект из другого модуля в Python - PullRequest
1 голос
/ 04 августа 2020

У меня есть класс, скажем, 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

random_method в модуле 3 также импортирует и вызывает другой метод 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?

1 Ответ

1 голос
/ 04 августа 2020

Вы можете использовать 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'
...