python unittest失败的断言与重载__repr__

时间:2011-10-21 03:57:37

标签: python unit-testing 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]!我在我的repr方法(下面)中尝试了其他几种变体,它们都返回了错误。

return repr(q)
return str(q)

2 个答案:

答案 0 :(得分:4)

qBoundedQueue[1]list。除非您覆盖__eq__,否则它们不能相等。 repr不用于等式测试。

答案 1 :(得分:1)

作为递归状态,__repr__不用于检测两个值是否相等。

您有几种选择:

  1. 定义__eq__这是python调用以检查相等性的内容。我不推荐这个,因为我没有真正看到BoundedQueue等于列表
  2. 定义返回列表的items()方法。然后检查列表中的相等性
  3. 添加一种从列表构建BoundedQueue的方法。然后编写__eq__以检查两个BoundedQueues之间的相等性。