2014-11-21 1 views
-4

함수에 대한 단위 테스트를 쓰고 있습니다. 이 함수는 완벽하게 작동하지만 단위 테스트를 통해이 함수를 테스트하려고하면 unbondlocalerror가 표시됩니다. 나는 전역 변수python - UnboundLocalError : 할당 전에 참조 된 로컬 변수

#return value for get event 
global rev_get_event 

def Get_event(username, password, eventID): 
try: 
    payload = {'username': username, 'password': password} 
    s = requests.Session() 
    r = s.get("https://www.regonline.com/api/default.asmx/Login", params=payload) 
    login_info = minidom.parseString(r.text) 
except requests.exceptions.RequestException: 
    logger.exception("Requests error") 
    api = login_info.getElementsByTagName('APIToken') 
    for api_token in api: 
     api_token = api_token.firstChild.nodeValue 
    payload2 = {'eventID' : eventID, "apiToken" : api_token } 
    rev_get_event = requests.get('https://www.regonline.com/api/default.asmx/GetEvent', params=payload2) 
except requests.exceptions.RequestException: 
    logger.exception("Requests error") 
return rev_get_event 

로 정의하고 내 단위 테스트는 rev_get_event 한 :

def test_get_event_good(self): 
    result = rg.Get_event("eddietest", "eddietest", 18283) 
    get_event = minidom.parseString(result) 
    print result 
    success = get_event.getElementsByTagName('Success') 
    for answer in success: 
     answer = answer.firstChild.nodeValue 
    self.assertEqual(answer, "true", "connetion failed") 

그리고 그것은 나를 준다 : 당신은 선언 된 변수를 반환하는

UnboundLocalError: local variable 'rev_get_event' referenced before assignment 
+1

'rev_get_event'는'except' 블록에서만 정의됩니다.'try'가 성공하면 그 변수는 결코 정의되지 않습니다. – CoryKramer

+0

전역 varibale "global rev_get_event"로 정의했습니다. – jifferent

답변

0

을 당신이의 흐름에 들어가면 :

except requests.exceptions.RequestException: 

유닛 테스트에서 사용하지 않았을 때 항상이 흐름에 들었을 것입니다. 그러나 유닛 테스트에서 여러분은 알지 못합니다. 그리고 이것은 정확히 단위 테스트가 이런 종류의 버그를 찾는 이유입니다!

관련 문제