You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python单元测试断言失败:如何修正对象比较的断言语句

解决Python单元测试中对象实例比较断言失败的问题

方案一:重写FunctionOne的__eq__方法

Python默认用==比较对象的内存地址(即是否为同一个实例)。要让不同实例的FunctionOne根据属性相等被判定为相等,需在FunctionOne类中重写__eq__方法:

修改function_one.py:

class FunctionOne(Base):
    def __init__(self, amount, tax):
        super().__init__(amount, tax)
    
    def __eq__(self, other):
        # 先判断对方是否为FunctionOne实例
        if not isinstance(other, FunctionOne):
            return False
        # 比较核心属性(假设Base类已将amount、tax作为实例属性保存)
        return self.amount == other.amount and self.tax == other.tax

同时修正测试中的方法调用错误(单下划线是保护方法,双下划线会触发名称修饰),原断言语句即可正常工作:

assert function_two._get_info() == FunctionOne(0,1)

方案二:直接比较对象属性(不修改原类)

如果不想改动原类代码,可在测试中直接验证返回对象的属性值,而非比较对象本身:

修改测试代码:

def test__get_info(self):
    a = "a"
    b = "b"
    c = "c"
    expected_amount = 0
    expected_tax = 1

    function_two = FunctionTwo(a, b, c)
    result = function_two._get_info()  # 修正方法调用的下划线问题
    
    # 用unittest断言方法更规范,也可使用普通assert
    self.assertEqual(result.amount, expected_amount)
    self.assertEqual(result.tax, expected_tax)
    
    # 普通assert写法:
    # assert result.amount == expected_amount and result.tax == expected_tax

额外注意事项

  • 原代码中FunctionTwo的类名拼写错误:Class应改为小写的class
  • 保护方法_get_info不能用__get_info调用,双下划线开头的方法会被Python做名称修饰,无法直接通过原名称访问

内容的提问来源于stack exchange,提问作者Praveen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:05:23