为什么我的简单__eq__实现给出了AssertionError?

时间:2013-11-12 19:27:00

标签: python unit-testing python-3.x operator-overloading equality

我正在尝试在Python 3.3中实现标准的相等运算符,遵循其他问题的代码示例。我得到一个断言错误,但我无法弄清楚什么是坏的。我在这里想念的是什么?

class RollResult:
    def __init__(self, points, unscored_dice):
        self.points = points
        self.unscored_dice = unscored_dice

    def __eq__(self, other):
        return (self.points == other.points and self.unscored_dice == other.unscored_dice)

这是测试。许多其他测试正在通过,因此基本设置是正确的。这是我对该类的第一次测试,我之前从未尝试过单元测试等式重载,所以它也可能是测试的错误。

class TestRollResultClass(unittest.TestCase):
    def test_rollresult_equality_overload_does_not_test_for_same_object(self):
        copy1 = RollResult(350,2)
        copy2 = RollResult(350,2)
        self.assertNotEqual(copy1,copy2)

结果:

AssertionError: <greed.RollResult object at 0x7fbc21c1b650> == <greed.RollResult object at 0x7fbc21c1b650>                                        

1 个答案:

答案 0 :(得分:4)

您的__eq__()似乎正常运作。您正在使用assertNotEqual(),如果两个参数相等,则会引发AssertionError。您为断言中使用的每个RollResult对象提供了相同的参数,因此它们是相同的,因此失败。

看起来您要么使用assertEqual(),要么对其进行更改,以便copy1copy2的构造方式不同。