Ошибка в словаре mock.patch методов, вызываемых в списке

Если я правильно помню, вы должны положить вокруг него контейнер (например, JScrollPane).

1
задан deeboeh 11 March 2019 в 21:03
поделиться

1 ответ

Ваш патч должен читать @patch('module.file2.f1.method_1')

Я расскажу вам, почему:

test_determine_failure_modes.py импортирует file1 as f1. Затем file1 читается, и он определяет method1 в своих локальных. Это становится доступным на символе f1.

Итак, таблицы символов выглядят следующим образом:

file1: {'method1': <function>, <METHOD_1>, ...}
f1: {'method1': <function>, <METHOD_1>, ...}

Затем вы исправляете file1.method1 и получаете эту таблицу символов

file1: {'method1': <function>, MOCK, ...}
f1: {'method1': <function>, <METHOD_1>, ...}

Затем вы вызываете f1.method1 и получаете фактический функция.

Похоже, вы используете method_dict для ссылки на функцию, поэтому вам все же нужно немного углубиться. К счастью, в unittest.mock.patch есть утилита для насмешки содержимого диктов, например:

with patch.dict(f2.method_dict, {'method1': your_mock_here}):
    your_test_here()

Еще один способ - отложить разрешение имени метода до того, как он будет смоделирован.

method_dict = {
    'method_1' : lambda data: f1.method1(data),
    'method_2' : lambda data: f1.method2(data),
    'method_3' : lambda data: f1.method3(data)
}

Здесь, поиск для f1.method1 не происходит до тех пор, пока он не будет проверен. В предыдущем случае вы помещаете ссылку на функцию, когда file2 был прочитан. Здесь ссылка не разрешается, пока метод не будет вызван.

0
ответ дан munk 11 March 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: