Chr*_*ier 4 python testing repr python-2.7 python-3.x
我正在将一个python库从python 2移植到一个代码库(2.6,2.7和3.3+)中的python 2和3.剩下的主要问题是很多测试使用这样的东西:
def test(self):
example = {u'foo': u'bar'}
self.assertEqual(str(example), "{u'foo': u'bar'}")
Run Code Online (Sandbox Code Playgroud)
它在python 2中工作,但在python3中引发异常:
AssertionError: "{'foo': 'bar'}" != "{u'foo': u'bar'}"
Run Code Online (Sandbox Code Playgroud)
除了"测试不同"之外,还有一种处理这些问题的标准方法吗?超载__repr__?
摆脱那些测试; 他们旁边没用了:
这测试Python的实现dict.__repr__是否有效.Python本身已经对此进行了测试; 而是专注于项目代码库.如果Python无法正确呈现字典表示,那么修复它不是您项目的工作.
Python词典没有固定的顺序; 测试它们的表示是否与给定字符串匹配不会稳定.
此外,Python 3.3引入了哈希随机化,这意味着给定字典的顺序将从调用更改为调用.见PYTHONHASHSEED.
如果您正在测试项目API calll的结果,请使用self.assertEqual()而不是测试字典相等性; assertDictEqual()如果两个词典不匹配,它将用于给你有意义的错误消息.
由于Python 3.3将其解释u'foo'为类型的文字str,因此比较输出{u'foo': u'bar}将适用于Python 2.6,2.7和3.3及更高版本.
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |