2013-01-07 62 views
4

我明白如何在函數或lambda上使用assertRaises,但我想在實例方法上使用它。如何用assertRaises測試Python中的實例方法?

因此,舉例來說,如果我有一個類calculator,做無限精度算術,我可能會寫測試:

def setUp(self): 
    self.calculator = calculator.calculator() 

def test_add(self): 
    self.assertRaises(TypeError, self.calculator.add, ['hello', 4]) 

因爲self.calculator.add是可調用和['hello', 4]是我想通過它的參數,但是當我運行測試,我得到以下致命錯誤:

TypeError: add() missing 1 required positional argument: 'num2' 

我相信這是引發此錯誤,因爲當self.assertRaises呼籲self.calculator.addself是沒有像通常在實例方法被調用時那樣通過第一次的攻擊。我該如何解決?

回答

7

至於其他的答案說,你必須單獨值傳遞,但你可以找到一個替代讀起來更容易是使用with語句:當您使用assertRaises這個

def test_add(self): 
    with self.assertRaises(TypeError): 
     self.calculator.add('hello', 4) 

你只需在with區塊內寫入代碼即可。這意味着它是一種更自然的編碼方式,並且您不僅限於測試單個函數調用。

0

你必須通過值是這樣的:

self.assertRaises(TypeError, self.calculator.add, arg1, arg2, arg3) 
4

我認爲正在提供self,但assertRaises期待您單獨列出的參數。嘗試:

self.assertRaises(TypeError, self.calculator.add, 'hello', 4) 
+0

對,就是這樣,謝謝 – clementine

相關問題