Ложные патчи появляются в неправильном порядке?

У меня есть тестовый модуль (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 передается первым.