python 2 doctest如何失败,但失败消息中的值没有区别?

rak*_*ice 14 python unicode doctest

我在Windows中使用Python 2.7.9.

我有一个UTF-8编码的python脚本文件,其中包含以下内容:

# coding=utf-8

def test_func():
    u"""
    >>> test_func()
    u'?'
    """
    return u'?'
Run Code Online (Sandbox Code Playgroud)

当我运行doctest时,我得到了一个奇怪的失败:

Failed example:
    test_func()
Expected:
    u'\u2603'
Got:
    u'\u2603'
Run Code Online (Sandbox Code Playgroud)

无论是通过我通常使用的IDE(IDEA IntelliJ)还是从命令行启动doctests,我都会看到同样的失败输出:

> x:\my_virtualenv\Scripts\python.exe -m doctest -v hello.py
Run Code Online (Sandbox Code Playgroud)

我复制下面的线ExpectedGot成的WinMerge排除在我没发现的人物有些微妙的差异; 它告诉我他们是相同的.

但是,如果我重做命令行运行,但将输出重定向到文本文件,如下所示:

> x:\my_virtualenv\Scripts\python.exe -m doctest -v hello.py > out.txt
Run Code Online (Sandbox Code Playgroud)

测试仍然失败,但导致的失败输出有点不同:

Failed example:
    test_func()
Expected:
    u'?'
Got:
    u'\u2603'
Run Code Online (Sandbox Code Playgroud)

如果我将转义的unicode文字放在我的doctest中:

# coding=utf-8

def test_func():
    u"""
    >>> test_func()
    u'?'
    """
    return u'\\u2603'
Run Code Online (Sandbox Code Playgroud)

测试通过.但据我所知,u'\u2603'u'?'值应该为同样的事情.

真的我有两个关于失败案例的问题:

  • doctester对于该案例所具有的价值(下Expected或者Got)是不正确的表示之一?(即x != eval(repr(x)))
  • 如果没有,为什么测试失败?

Zac*_*tes 7

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']
Run Code Online (Sandbox Code Playgroud)

在引擎盖下,doctest模块会多次格式化结果和预期结果.您的问题似乎是由字符串编码引起的解释错误.打印到控制台的内容已经过格式化(使用%s),从而消除了任何明显的差异; 使它们看起来完全相同