assertRaises中的“issubclass()arg 2必须是类或元组”

2024-10-01 11:32:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个无效模块

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")

我尝试做一个unittest,其中函数抛出invalidoj异常

^{pr2}$

在运行上面的test_obj类时,它给我一个错误“issubclass()arg 2 must be a class or tuple”。如果我改变了路线

self.assertRaises(InvalidObj, at.aequalb)

这很好。错误不应该在引发时返回传递给它的消息吗?在


Tags: 模块selfhelloreturnobjectinitvaluedef
1条回答
网友
1楼 · 发布于 2024-10-01 11:32:48

不,它不应该像你期望的那样工作。第一个参数是类(或元组),第二个参数是可调用的,其余参数如in the documentation所述。在

即使exception接受参数,unittest也不能提供异常之间的深入比较(否则,要说同一类的两个独立实例是等价的,这将非常复杂)。在

要解决您的问题,只需分别测试属性:

with self.assertRaises(InvalidObj) as cm:
    at.aequalb()

self.assertEqual("This is an error", cm.exception.value)

注意:上面我使用了assertRaises()方法作为上下文管理器。当只给出一个参数时,它的行为是这样的。有关详细信息,请访问mentioned documentation。在

相关问题 更多 >