2016-07-28 98 views
1

我正在爲python項目創建測試。正常的測試工作得很好,但是我想測試一下,如果在某種情況下我的函數會引發一個自定義的異常。爲此我想使用assertRaises(Exception,Function)。有任何想法嗎?測試自定義異常引發時出錯(使用assertRaises())

是引發異常的功能是:

def connect(comp1, comp2): 
    if comp1 == comp2: 
     raise e.InvalidConnectionError(comp1, comp2) 
    ... 

唯一的例外是:

class InvalidConnectionError(Exception): 
    def __init__(self, connection1, connection2): 
     self._connection1 = connection1 
     self._connection2 = connection2 

    def __str__(self): 
     string = '...' 
     return string 

的測試方法如下:

class TestConnections(u.TestCase): 
    def test_connect_error(self): 
     comp = c.PowerConsumer('Bus', True, 1000) 
     self.assertRaises(e.InvalidConnectionError, c.connect(comp, comp)) 

不過,我得到以下錯誤:

Error 
Traceback (most recent call last): 
File "C:\Users\t5ycxK\PycharmProjects\ElectricPowerDesign\test_component.py", line 190, in test_connect_error 
self.assertRaises(e.InvalidConnectionError, c.connect(comp, comp)) 
File "C:\Users\t5ycxK\PycharmProjects\ElectricPowerDesign\component.py", line 428, in connect 
raise e.InvalidConnectionError(comp1, comp2) 
InvalidConnectionError: <unprintable InvalidConnectionError object> 
+1

InvalidConnectionError'的''的方法__init__'拼錯如'__int__'。 – DeepSpace

+0

謝謝你指出這一點。然而,這只是在代碼錯誤,而不是在我的實際文件。我將編輯我的問題。 –

回答

5

assertRaises預計實際上perform the call。但是,您已經自己執行它,因此在assertRaises實際執行之前拋出錯誤。

self.assertRaises(e.InvalidConnectionError, c.connect(comp, comp)) 
# run this^with first static argument^and second argument^from `c.connect(comp, comp)` 

使用任一那些代替:

self.assertRaises(e.InvalidConnectionError, c.connect, comp, comp) 

with self.assertRaises(e.InvalidConnectionError): 
    c.connect(comp, comp) 
+0

謝謝,這解決了這個問題。我接受了你的答案! –

相關問題