python unittest 断言失败,重载 __repr__ 导致
在我的代码中,我定义了一个类,并为它写了一个自己的表示方法(repr)。这个类的表示应该是一个列表。
def __repr__(self):
if self.front <= self.tail:
q = self._queue[self.front:self.tail+1]
elif self.front > self.tail:
q = self._queue[self.front:]
q.extend(self._queue[:self.tail + 1])
return (q.__repr__())
我写了以下的单元测试来测试这个方法。
def test_enqueue(self):
q = BoundedQueue(1)
q.enqueue(1)
self.assertEqual(q, [1])
但是,我遇到了一个断言错误:
Traceback (most recent call last):
File "test_internmatch_queue.py", line 13, in test_enqueue
self.assertEqual(q, [1])
AssertionError: [1] != [1]
我不太明白问题出在哪里……在我看来,[1]==[1]是相等的!我尝试了几种不同的写法在我的表示方法中(如下),但它们也都返回了错误。
return repr(q)
return str(q)
2 个回答
1
在递归状态下,__repr__
并不是用来判断两个值是否相等的。
你有几个选择:
- 定义
__eq__
方法,这是 Python 用来检查两个对象是否相等的。我不太推荐这个,因为我觉得一个有界队列(BoundedQueue)和一个列表并不算相等。 - 定义一个
items()
方法,返回列表。然后可以用这个列表来检查相等性。 - 添加一个方法,可以从列表构建一个有界队列。然后再写
__eq__
方法,用来检查两个有界队列是否相等。
4
q
是一个 BoundedQueue
(有界队列)。[1]
是一个 list
(列表)。它们不能相等,除非你重写 __eq__
这个方法。repr
这个东西不是用来判断是否相等的。