Ложные патчи появляются в неправильном порядке?
У меня есть тестовый модуль (test.py
), который импортирует функции из другого модуля (keyboard.py
).
keyboard.py
def get_keys(keyList, timeStamped):
return event.getKeys(keyList=keyList, timeStamped=timeStamped)
def wait_keys(keyList, timeStamped):
return event.waitKeys(keyList=keyList, timeStamped=timeStamped)
test.py
@mock.patch('keyboard.wait_keys')
@mock.patch('keyboard.get_keys')
def test_2(self, mock_waitKeys, mock_getKeys):
mock_waitKeys.return_value = [['wait_keys!', 0.1]]
mock_getKeys.return_value = [['get_keys!',0.1]]
run_blocks(trials,noise,win,expInfo, incorrect, tone1, tone2, experiment_details,allPoints,32,60)
Я пытаюсь разместить два фиктивных возвращаемых значения, но их эффекты инвертированы.
Когда я вызываю их в интерактивной консоли, когда они остановлены в точке останова, или проверяю значения при обычном вызове, две ложные функции возвращают друг другу ложные возвращаемые значения. Из консоли:
get_keys()
Out[2]: [['wait_keys!', 0.1]]
wait_keys()
Out[3]: [['get_keys!', 0.1]]
Почему мои ложные патчи появляются в неправильном порядке?
Ответы
Ответ 1
Порядок ваших патчей должен быть отменен, так как они применяются снизу вверх. См. Этот комментарий в документах python для вложенных аргументов:
Примечание. Когда вы устанавливаете декодеры патчей, макеты передаются в декорированную функцию в том же порядке, в котором они применяются (обычный порядок питона, который применяются декораторы). Это означает снизу вверх, поэтому в приведенном выше примере макет для module.ClassName1 передается первым.