我正在尝试在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>
答案 0 :(得分:4)
您的__eq__()
似乎正常运作。您正在使用assertNotEqual()
,如果两个参数相等,则会引发AssertionError。您为断言中使用的每个RollResult
对象提供了相同的参数,因此它们是相同的,因此失败。
看起来您要么使用assertEqual()
,要么对其进行更改,以便copy1
和copy2
的构造方式不同。