python3中的eval(repr(object))的等式测试失败

时间:2014-11-13 17:09:28

标签: python unit-testing python-3.x eval repr

这里是名为__repr__

的类中的Grid方法
def __repr__(self):
    return 'Grid(%r, %r)' % (self.rows, self.cols)

我已经在unittest模块中放了一些基本测试来检查eval是否可以在没有失败的情况下进行相等测试,看起来像这样:

# One of the tests inside a unittest.TestCase subclass
def test_grid(self):
    grid = Grid(3, 4)
    self.assertEqual(eval(repr(grid)), grid)

现在,这是测试报告(我已将此测试与其他人隔离):

======================================================================
FAIL: test_grid (tests.test_core.TestCore)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/Desktop/sample/tests/test_core.py", line 14, in test_grid
    self.assertEqual(eval(repr(grid)), grid)
AssertionError: Grid(3, 4) != Grid(3, 4)

----------------------------------------------------------------------
Ran 1 test in 0.003s

FAILED (failures=1)

Assertion异常消息让我更加困惑。是不是Grid(3, 4) != Grid(3, 4)应该是False

1 个答案:

答案 0 :(得分:2)

我认为问题的核心是你正在创建一个新对象,即使里面的值是相同的 - python也不能说明它们是,所以它通过引用比较对象。他们是不同的。我相信你需要覆盖python的魔术比较运算符才能通过内部值进行比较。