2011-06-23 80 views
1
def test_invalid_host(self): 
    controller = SSHController("host name") 
    self.assertRaises(SSHException, controller.login()) 
#test_invalid_host End 

controller.login()是否會在測試通過之前完成,或者只要引發SSHException就會通過測試?單元測試結束之前assertRaises函數是否會完成?

+2

我想你需要傳遞controller.login而不用調用它(即刪除'()')。當它引發錯誤時它會停止。 –

+0

'assertRaises'聲明調用'controller.login'會產生'SSHException'。如果該函數不會引發一個 - 即使它在內部執行,但是會再次捕獲它 - 那麼assertRaises將失敗。 – katrielalex

回答

3

只要引發SSHException,異常就會被assertRaises方法捕獲。因此controller.login的其餘部分未運行。

PS。請務必controller.login後打電話到

self.assertRaises(SSHException, controller.login) 

沒有括號。如果編寫controller.login()那麼在調用assertRaises方法之前確實會調用login方法,因爲所有參數都在傳遞給函數/方法之前進行評估。

+0

我刪除了(),但在引發異常後測試未通過。相反,函數controller.login正在處理異常。 – Takkun

+0

@Takkun:如果您希望'assertRaises'查看異常,則controller.login方法不得捕獲(或必須重新加載)異常。 – unutbu

相關問題