我在Windows中使用Python 2.7.9。
我有一个UTF-8编码的python脚本文件,其中包含以下内容:
# coding=utf-8
def test_func():
u"""
>>> test_func()
u'☃'
"""
return u'☃'
当我运行doctest时,我得到了一个奇怪的失败:
Failed example:
test_func()
Expected:
u'\u2603'
Got:
u'\u2603'
无论是通过我通常使用的IDE(IDEA IntelliJ)还是从命令行启动doctests,我都会看到同样的失败输出:
> x:\my_virtualenv\Scripts\python.exe -m doctest -v hello.py
我将Expected
和Got
下的行复制到WinMerge中,以排除我无法看到的字符的细微差别;它告诉我他们是完全相同的。
但是,如果我重做命令行运行,但将输出重定向到文本文件,如下所示:
> x:\my_virtualenv\Scripts\python.exe -m doctest -v hello.py > out.txt
测试仍然失败,但导致的失败输出有点不同:
Failed example:
test_func()
Expected:
u'☃'
Got:
u'\u2603'
如果我将转义的unicode文字放在我的doctest中:
# coding=utf-8
def test_func():
u"""
>>> test_func()
u'☃'
"""
return u'\\u2603'
测试通过了。但就我所知,u'\u2603'
和u'☃'
应评估同样的事情。
我真的有两个关于失败案例的问题:
Expected
或Got
)之间的陈述之一是不正确的吗? (即x != eval(repr(x))
)答案 0 :(得分:7)
ionic run
模块使用doctest
来区分结果和预期结果。如下所示:
difflib
引擎盖下,>>> import difflib
>>> variation = difflib.unified_diff('x', 'x')
>>> list(variation)
[]
>>> variation = difflib.unified_diff('x', 'y')
>>> list(variation)
['--- \n', '+++ \n', '@@ -1 +1 @@\n', '-x', '+y']
模块会多次格式化结果和预期结果。您的问题似乎是由字符串编码引起的解释错误。打印到控制台的内容已经过格式化(使用doctest
),从而消除了任何可见的差异;使他们看起来相同。
答案 1 :(得分:1)