Причиной этой ошибки является то, что модуль является поддельным, а не классом
AssertionError: <class 'unittest.mock.MagicMock'> is not an instance of
<class ...EmrCreateJobFlowOperator'>
Изменение
@patch("mypackage.subpackage.mymodule"
К
@patch("mypackage.subpackage.mymodule.SomeClass"
Мне бы хотелось, чтобы в моем макете было оригинальное поведение насмешливого класса,
Боюсь, что все наоборот, это создаст экземпляр App
со всеми насмешенными методами и атрибутами, это полезно только тогда, когда вы хотите смоделировать класс, особенно __init__
, чтобы использовать один метод (или два)
mock_app = MagicMock(name='App', spec=App)
mock_app.method_one.return_value = whatever
Я специально высмеиваю атрибут / метод method_one
, тогда как app
будет иметь все реальное, кроме method_one
mock_app = MagicMock(name='App', 'method_one', spec=App)
mock_app.method_one.return_value = 'mocked value'
app = App()
Короче, ваш патч будет
from airflow.contrib.operators.emr_create_job_flow_operator import EmrCreateJobFlowOperator
@patch.object(EmrCreateJobFlowOperator, 'the_method')