Как проверить, вызывается ли метод объекта?Python

Программы на Python
Anonymous
Как проверить, вызывается ли метод объекта?

Сообщение Anonymous »

Привет, я пытаюсь проверить, вызывает ли метод в объекте 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

Вернуться в «Python»