2016-03-22 162 views
-1

所以我想導入一個模塊,並從該模塊中的類中測試方法。如何斷言與Python單元測試不會引發錯誤

這裏是一個方法的例子。

def production_warning(self, targetenv): 
    if targetenv == 'prdv': 
     prodwarning1 = raw_input("WARNING: You are deploying to the production environment. Are you sure you want to do this? Y/N: ").upper() 
     if prodwarning1 == "N": 
      sys.exit() 
     prodwarning2 = raw_input("DEPLOYING TO PRDV, ARE YOU REALLY, REALLY SURE? Y/N: ").upper() 
     if prodwarning2 == "N": 
      sys.exit() 
    else: 
     return True 

這是我試圖寫的一個測試的例子。

def production_warning(): 
    try: 
     assert test.production_warning('prdv') is not errors 
     assert test.validate_params('fakeenv') is errors 
     print "Test Passed {0}/5: validate_params".format(counter) 
     test_db_refresh() 
    except: 
     print "Test Failed {0}/5: validate_params".format(counter) 
     test_db_refresh() 

def db_refresh_prompt(): 
    # assert test.db_refresh_prompt() is not errors 
    global counter 
    counter += 1 
    print "Test Passed {0}/5: db_refresh_prompt".format(counter) 

production_warning() 
db_refresh_prompt() 
etc() 

如何檢查是否出現錯誤?在一天結束時,我試圖通過所有這些測試,併爲每個功能,如果沒有例外提出,打印「成功」。如果發生異常,請繼續下一個測試。人們似乎一直指着我「調用你的函數會自動引發一個異常,如果有的話」,但這會停止我的測試,每當拋出異常,我不想這樣,我想繼續下一個測試。

我可以解決此做:

def validate_params(): 
try: 
    assert test.validate_params('hackenv-re', 'test.username') is not errors 
    assert test.validate_params('fakeenv', 'test.username') is errors 
    assert test.validate_params('hackevn-re', 'vagrant') is errors 
    global counter 
    counter += 1 
    print "Test Passed {0}/5: validate_params".format(counter) 
    test_db_refresh() 
except: 
    print "Test Failed {0}/5: validate_params".format(counter) 
    test_db_refresh() 

但似乎這樣的失敗擺在首位使用單元測試的目的是什麼?我認爲,如果發生異常,它會返回一個T/F,我可以隨心所欲地執行任何操作。

希望是足夠的信息。

基於許多給出的答案,我假設沒有什麼內置在單元測試,我可以做assertRaise(我相信這是在Django使用)

+0

那麼你是否使用unittest?你的代碼看起來不像你。 – Goyo

+0

[如何聲明一個函數調用不會返回unittest錯誤?](http://stackoverflow.com/questions/36142282/how-to-assert-that-a-function-call-does- not-return-an-error-with-unittest) – Goyo

+0

我想要做的就是使用unittest並找到一種方法來測試是否引發異常。而已。如何檢查是否引發異常? – david

回答

4

斷言的是,測試的代碼不會引發異常免費提供,您無需爲此編寫代碼。

+0

如果我有5個函數類似於運行測試的production_warning,並且我想要在一個遍中運行全部5個函數,則異常將導致整個事情停止。 – david

+0

任何失敗的斷言都會導致整個事情停止。所以你不想斷言? – Goyo

+0

ohhhh,我想不是。我不想讓它停下來。 – david