【发布时间】:2012-11-20 13:12:53
【问题描述】:
我正在这样写我的文档测试:
>>> some_function(a=1, b=2)
{u'id': u'123', u'name': u'abc'}
这适用于 Python 版本 2.5、2.6 和 2.7,但对于 Python 3 失败并出现以下错误:
Expected:
{u'id': u'123', u'name': u'abc'}
Got:
{'id': '123', 'name': 'abc'}
问题是如果我这样写我的文档测试:
>>> some_function(a=1, b=2)
{'id': '123', 'name': 'abc'}
它们仅适用于 Python3,在 Python2 版本上失败。我的问题是如何让它跨版本兼容?
【问题讨论】:
-
您必须使用与使您的代码在 Python 2.x 和 3.x 中都能工作的相同技术。那会变得丑陋,快速。就个人而言,我会坚持使用 unittests 而不是 doctests,并使用 Sphinx 作为 API 文档。
-
我确实使用 unittest 进行测试,这只是为了验证示例。
-
你试过 Python 3.3 吗? 3.3 重新引入了 u"" 语法 (docs.python.org/3/whatsnew/3.3.html)。不知道这个改动会不会影响到doctest,但是值得一试。
-
@codeape:您可以使用
u''来指定文字,但repr(somestring)不会使用它们,因此测试仍然会失败。将其与使用r''原始 python 文字进行比较;r也将从表示中删除。 -
好的,我明白了。我想用 doctests 做到这一点的唯一方法就是重写测试。例如
>>> result = some_function(a=1, b=2) >>> print(result["id"])等
标签: python python-3.x doctest