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

时间:2015-05-16 03:19:34

标签: python unicode doctest

我在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

我将ExpectedGot下的行复制到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'☃'应评估同样的事情。

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

  • 对于该案例,doctester所提供的值(ExpectedGot)之间的陈述之一是不正确的吗? (即x != eval(repr(x))
  • 如果没有,为什么测试失败?

2 个答案:

答案 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)

只是免费而也因为在工作讨论中没有考虑这种可能性:我有一个类似的弱问题。见

[...]
Expected:
    <xarray.DataArray ()>
    array(0.0)
    Coordinates:
        d1   |S3 'nat'
        d2   |S3 'dat'
        d3   |S3 'a'        
Got:
    <xarray.DataArray ()>
    array(0.0)
    Coordinates:
        d1   |S3 'nat'
        d2   |S3 'dat'
        d3   |S3 'a'

当然,没有人 - 可见的区别。我的琐碎案例中的解决方案是确保没有空格!

enter image description here