Как и у многих людей, у меня проблемы с фиктивным исправлением и получением правильного пути. В частности, мой код ссылается на другой класс в том же файле, и у меня возникают проблемы с исправлением этой ссылки.
У меня есть следующий файл python, package / engine / dataflows / flow.py:
class Flow:
def run(self, type):
if type == 'A':
method1()
elif type == 'B':
method2()
else:
backfill = Backfill()
backfill.run()
class Backfill(Flow):
def run(self):
...
И пакет тестового файла / tests / engine / dataflows / test_Flow.py
import unittest
from unittest.mock import Mock, patch
from engine.dataflows.flow import Flow
class MockFlow(Flow):
...
class TestFlowRun(unittest.TestCase):
def setUp(self):
self.flow = MockFlow()
def test_run_type_c(self):
with patch('engine.dataflows.flow.Backfill') as mock_backfill:
self.flow.run(type='C')
assert mock_backfill.run.call_count == 1
Патч работает в том, что он не выдает ошибку при запуске с pytest, но утверждение терпит неудачу. Я предполагаю, что это потому, что локальная ссылка на класс Backfill уже была импортирована, когда MockFlow был инициализирован, но я не смог найти путь исправления, который обрабатывает это.
Содержимое flow.py включает базовый класс Flow и пару дочерних классов, которые реализуют различные шаблоны потока данных. Они расположены в одном файле для простоты понимания и общих зависимостей.