2014-11-21 6 views
-4

Я пишу модульный тест для функции. Функция отлично работает на нем, но когда я попытался протестировать эту функцию через единичный тест, он дает мне unbondlocalerror. я rev_get_event определить как глобальную переменную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 

и мой блок тест:

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: 

Я предполагаю, что, когда вы использовали его не в модульном тестировании, вы всегда попадали в этот поток, но при тестировании устройства вы не делаете этого, и именно поэтому это модульное тестирование, чтобы найти такие ошибки!