Привет, я пытаюсь проверить, вызывает ли метод в объекте A методы другого объекта, объекта B. У меня уже есть отдельные тесты, проверяющие функциональность B, поэтому моя цель — просто проверить, был ли вызван метод B. Я пытаюсь использовать макеты для создания макета объекта B, следуя методу, подобному этому, но продолжаю получать следующую ошибку: AssertionError: Ожидается, что «процесс» был вызван один раз. Вызывается 0 раз. Я неправильно делаю макет?
Насколько я понимаю, в этом ответе предлагалось получить доступ к полю в sut и установить для него макет, но из-за того, как мой код настроен, я не могу получить доступ к другим объектам.
Пример кода:
# object B
from abc import ABCMeta
class B(metaclass=ABCMeta):
def process(self):
print('I am B')
# object C
from abc import ABCMeta
class C(metaclass=ABCMeta):
def process(self):
print('I am C')
# object A
from abc import ABCMeta
from b import B
from c import C
class A(metaclass=ABCMeta):
def __init__(self):
self.__known_auto_processes = {}
self.__inti_know_processes()
def process(self, arg):
try:
self.__known_auto_processes[arg].process()
except KeyError as error:
print(f'Invalid arg option {error.args}.')
def __inti_know_processes(self):
self.__known_auto_processes['B'] = B()
self.__known_auto_processes['C'] = C()
Пример теста:
import unittest
from unittest.mock import patch
from a import A
class TestA(unittest.TestCase):
@patch("b.B")
def test_b_call(self, mock_b):
a = A()
a.process('B')
mock_b.process.assert_called_once()
Подробнее здесь: https://stackoverflow.com/questions/733 ... -is-called