2016-11-15 62 views
0

所以我有類犬:Python的單元測試上醒目錯誤而失敗的測試用例

class Dog: 

def __init__(self, res): 
    self._res = res 


def error(self): 
    raise IndexError 

和單元測試:

class TestDog(unittest.TestCase): 

def setUp(self): 
    self.dog = Dog([1,2]) 

def testError(self): 
    self.assertRaises(IndexError, self.dog.error()) 

爲什麼測試用例失敗是testError? self.dog.error()應該導致IndexError被rasied,我相信assertRaises格式正確。

任何幫助表示讚賞,謝謝。

回答

1

當Python運行self.assertRaises(IndexError, self.dog.error())行時,它必須在將它們傳遞給它之前計算方法self.assertRaises的參數,因此它會調用self.dog.error()這會引發錯誤。這就是所有功能的工作原理。 self.assertRaises的存在不會阻止所引發的錯誤。您打算撥打self.assertRaises(IndexError, self.dog.error),其中第二個參數現在是實際功能/方法對象self.dog.error,但尚未調用它。 self.assertRaises會爲你打電話給你,以便它可以正確地進行測試。

或者:

with self.assertRaises(IndexError): 
    self.dog.error() 
+0

我明白了,這是有道理的。謝謝! –