Python 模拟补丁以错误的顺序出现?

Python 模拟补丁以错误的顺序出现?,python,mocking,python-unittest,python-mock,Python,Mocking,Python Unittest,Python Mock,我有一个测试模块(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

我有一个测试模块(
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)
@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)            
test.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)
@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]]

为什么我的模拟补丁以错误的顺序出现

补丁的顺序应该颠倒,因为它们是自下而上应用的。请参见嵌套模拟参数中的注释:

注意,当您嵌套补丁装饰器时,模拟将传递到 按照它们应用的相同顺序修饰函数(普通python 应用装饰程序的顺序)。这意味着从下到上,所以 在上面的示例中,传入了module.ClassName1的模拟 首先


啊哈!谢谢您的确认。:)