Skip to main content
 首页 » 编程设计

python之测试自定义异常的引发时出错(使用 assertRaises())

2025年05月04日15jillzhang

我正在为 python 项目创建测试。正常测试工作得很好,但是我想测试在某种情况下我的函数是否引发了自定义异常。因此我想使用 assertRaises(Exception, Function)。有什么想法吗?

引发异常的函数是:

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

异常(exception)情况是:

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> 

请您参考如下方法:

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)