2017-10-31 12 views
0

키보드 import *를 사용하여 다른 모듈 keyboard.py에서 함수를 가져 오는 모듈 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) 

지금, 내 테스트 기능, 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) 

당신이 볼 수 있듯이, 난

내부의 두 가지 기능이 있습니다 keyboard.py 두 모의 반환 값을 제 위치에 넣으려고합니다.

그러나 그 효과는 거꾸로 보입니다!

중단 점에서 중단 된 상태에서 대화식 콘솔에서 호출하거나 정상적으로 호출되었을 때 값을 검사하면 두 개의 조롱 된 함수가 서로의 가짜 반환 값을 반환합니다. 콘솔에서

: 테스트 함수에 전달되는

get_keys() 
Out[2]: [['wait_keys!', 0.1]] 
wait_keys() 
Out[3]: [['get_keys!', 0.1]] 

오전 나는 모의 인수의 순서에 대해 뭔가 오해?

test.get_keys가 아닌 keyboard.get_keys에 패치를 적용 할 수 있습니까?

감사합니다. Louise

답변

0

패치의 순서는 바뀌어야하므로 반대로 적용해야합니다. 중첩 된 모의 인수에 python docs에서이 댓글을 참조하십시오

참고하면 중첩 모의 객체들이 적용되는 동일한 순서로 장식 함수에 전달되는 패치 장식 (장식이 적용되는 일반 파이썬 순서) . 위에서 아래쪽에 있음을 의미하므로 위의 예에서 모듈에 대한 모의은 .ClassName1이 먼저 에 전달됩니다.

+0

아하! 확인해 주셔서 감사합니다. :) – Louise