python 2 doctest 为何会失败,但失败消息中的值却没有差异?

2024-04-11

我在 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) 还是从命令行启动文档测试,我都会看到相同的失败输出:

> x:\my_virtualenv\Scripts\python.exe -m doctest -v hello.py

我复制了下面的行Expected and 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 文字放入我的文档测试中:

# coding=utf-8

def test_func():
    u"""
    >>> test_func()
    u'☃'
    """
    return u'\\u2603'

测试通过。但据我所知,u'\u2603' and u'☃'应该评估相同的事情。

对于这个失败的案例,我确实有两个问题:

  • 是医生给出的陈述之一(根据Expected or Got)对于这种情况下 docester 的值不正确? (IE。x != eval(repr(x)))
  • 如果不是,为什么测试失败?

The 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模块多次格式化结果和预期结果。您的问题似乎是由字符串编码引起的解释错误。打印到控制台的内容已被格式化(使用%s),从而摆脱任何visible差异;制作它们look完全相同的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 2 doctest 为何会失败,但失败消息中的值却没有差异? 的相关文章

随机推荐