2017-09-11 58 views
0

例外,我有以下代碼:tyring來測試使用Python單元測試

class cutomTests(unittest.TestCase, moduleName.className): 

    def test_input_too_large(self): 
     '''className.functionName should fail with large input''' 
     self.assertRaises(moduleName.OutOfRangeError, self.functionName(4000) 

我得到了以下結果:

====================================================================== 
ERROR: test_input_too_large (__main__.customTests) 
className.functionName should fail with large input 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/user/workspace//ClassNameTests.py", line 37, in test_input_too_large 
    self.assertRaises(toRoman.OutOfRangeError, self.answer(4000)) 
    File "/home/user/workspace/moduleName.py", line 47, in answer 
    raise OutOfRangeError() 
OutOfRangeError 

所以結果應右路傳中,因爲引發異常? ??

回答

1

不可以。您應該使用assertRaises方法作爲上下文管理器。

with self.assertRaises(moduleName.OutOfRangeError): 
    self.functionName(4000) 

另一個用法是將函數和參數作爲下一個參數傳遞。但是它並不漂亮:

self.assertRaises(moduleName.OutOfRangeError, self.functionName, 4000) 
+0

兩者有什麼,什麼情況下做經理的區別 – Umar

2

你需要讓assertRaises通話功能,而不是做自己:

self.assertRaises(OutOfRangeError, self.functionName, 4000) 

現在,你調用self.functionName並通過其結果assertRaises。顯然,如果self.functionName引發異常,它將不會被assertRaises捕獲,因爲assertRaises在此時不會被調用:-)。

注意,作爲python2.7的,assertRaises可以作爲一個上下文管理器是方便多了:

with self.assertRaises(OutOfRangeError): 
    self.functionName(4000)