Это, вероятно, тривиальная проблема, но я не могу найти правильное решение, и я не понимаю, как это исправить. Я упростил задачу, поэтому у меня два файла my_module.py
и test_module.py
в одной и той же локализации.
import numpy as _np
class MyClass:
def __init__(self) -> None:
self.attribute = 1
self.method()
def method(self) -> None:
arr = _np.arange(9).reshape(-1, 3)
self.attribute = 2
from unittest.mock import Mock, patch
import pytest
from my_module import MyClass
@pytest.fixture
def init_mock():
with patch.object(MyClass, '__init__', return_value=None) as init:
yield init
@pytest.fixture
def method_mock():
with patch.object(MyClass, 'method') as method:
yield method
@pytest.fixture
def my_class_init_mock(init_mock):
yield MyClass()
@pytest.fixture
def my_class_method_mock(method_mock):
yield MyClass()
def test_init(my_class_method_mock):
assert my_class_method_mock.attribute == 1
def test_method(my_class_init_mock):
my_class_init_mock.method()
assert my_class_init_mock.attribute == 2
Все два теста пройдены. Более того, мне нужно проверить, был ли _np.arange(9).reshape
вызван один раз с -1, 3
аргументами. Я обнаружил, что должен обратиться непосредственно к numpy
из my_module.py
. Я пытался добавить @patch('my_module._np')
выше последнего теста. Я также пытался передать приспособление модуля на приспособление my_class_method_mock
. К сожалению, я не могу вызвать этот макет, когда запускаю функцию .method()
. Как создать связь между ними?