簡體   English   中英

assertRaises中的“ issubclass()arg 2必須是類或元組”

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM