I am writing my doctests like this:
>>> some_function(a=1, b=2)
{u'id': u'123', u'name': u'abc'}
This works fine for Python version 2.5, 2.6 & 2.7 but fails for Python 3 with following error:
Expected:
{u'id': u'123', u'name': u'abc'}
Got:
{'id': '123', 'name': 'abc'}
Problem is that if I write my doctests like this:
>>> some_function(a=1, b=2)
{'id': '123', 'name': 'abc'}
They will work only for Python3 and fail on Python2 version. My question is how do I make it cross version compatible?
我跑进在IPython的文档测试同样的问题。 有没有整齐的解决方案,但我包所有的u'
前缀在{}
即{u}'
,并提出了小功能,将包括或排除在适当。
你可以看到在u_format()函数 ,并使用它的doctest 。
但是,这是相当混乱的,所以我从文档测试感动了许多测试了。
另外,您也可以这样测试:
>>> some_function(a=1, b=2) == {'id': '123', 'name': 'abc'}
True
如果您需要在一些关键Unicode字符串,你可以使用u'abþ'
,并用分发到运行2to3
对文档测试。 但是,这仅适用于输入代码,而不是输出reprs。
如果你使用pytest,你可以做:
>>> some_function(a=1, b=2) # doctest: +ALLOW_UNICODE
{u'id': u'123', u'name': u'abc'}
和U会,如果你正在运行的Python 3被剥离,并保持在Python 2。
我碰到与NLTK文档测试相同的问题; :它是通过使用自定义文档测试输出检查器(即治疗u'foo”和‘富’相同),其由一个自定义的鼻子插件安装解决https://github.com/nltk/nltk/blob/develop/nltk /test/doctest_nose_plugin.py
该解决方案是不漂亮,但它工作得很好(有大约0.5兆字节的doctests在NLTK),它不会使文档测试的可读性。
编辑:发现这个鼻子插件的简化独立版本: https://github.com/gnublade/doctest-ignore-unicode