【发布时间】:2013-11-02 11:25:37
【问题描述】:
我在一个代码库(2.6、2.7 和 3.3+)中仅将 python 库从 python 2 移植到 python 2 和 3。剩下的主要问题是很多测试都使用这样的东西:
def test(self):
example = {u'foo': u'bar'}
self.assertEqual(str(example), "{u'foo': u'bar'}")
在 python 2 中有效,但在 python3 中引发异常:
AssertionError: "{'foo': 'bar'}" != "{u'foo': u'bar'}"
除了“测试不同”之外,还有处理这些问题的标准方法吗?重载__repr__?
【问题讨论】:
-
为什么要进行这些测试?他们试图验证什么?这闻起来很强烈XY problem。
-
澄清一下:在实际代码中,example是dict的子类,是另一个函数的返回值。这个子类有它自己的
__repr__,包装了dict的__repr__,但是'u's还在里面 -
这并没有说明任何事情。你到底想在这里测试什么?问题是子类的
__eq__不能与基本dict对象一起工作,所以您试图通过比较它们的repr来解决它?还是……? -
@ChristianGeier:您正在与固定字符串进行比较;如果您有测试自定义
__repr__,则生成带有或不带有u前缀的固定字符串。 -
@abarnert
__eq__确实有效,我不知道为什么原作者通过__repr__进行测试。我想我会使用它并完成它。
标签: python testing python-2.7 python-3.x repr