![](/img/trans.png)
[英]TypeError: issubclass() arg 2 must be a class or tuple of classes
[英]“issubclass() arg 2 must be a class or tuple” in assertRaises
我有一個模塊InvalidObj
class InvalidObj(Exception):
def__init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
class Hello(object):
def __init__(self):
self.a = 10
self.b = 20
def aequalb(self):
if self.a != self.b:
raise InvalidObj("This is an error")
我正在嘗試做一個單元測試,其中一個函數拋出InvalidObj異常
class test_obj(unittest.TestCase):
def test_obj(self):
at = Hello()
self.assertRaises(InvalidObj("This is an error"), a.aequalb)
運行上面的test_obj類時,它給我一個錯誤“ issubclass()arg 2必須是類或元組”。 但是如果我改成
self.assertRaises(InvalidObj, at.aequalb)
運行良好。 錯誤不是應該在引發錯誤時返回傳遞給它的消息嗎?
不,它不應該按您預期的方式工作。 第一個參數是一個類(或元組),第二個參數是可調用的,其余參數如文檔中所述 。
即使異常接受參數, unittest
也不能為您提供異常之間的深入比較(否則,說同一個類的兩個單獨實例是等效的,這將非常復雜)。
要解決您的問題,只需單獨測試屬性:
with self.assertRaises(InvalidObj) as cm:
at.aequalb()
self.assertEqual("This is an error", cm.exception.value)
注意:上面我已經使用assertRaises()
方法作為上下文管理器。 當僅給出一個參數時,它的行為就是這樣。 有關更多詳細信息,請訪問提到的文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.