Как тестирование Python 2 может завершиться неудачей и при этом не иметь разницы в значениях в сообщении об ошибке?
Я использую Python 2.7.9 в Windows.
У меня есть файл сценария Python в кодировке UTF-8 со следующим содержимым:
# 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
а такжеGot
в WinMerge, чтобы исключить некоторую тонкую разницу в персонажах, которых я не смог обнаружить; это сказало мне, что они были идентичны.
Однако, если я переделываю командную строку, но перенаправляю вывод в текстовый файл, вот так:
> x:\my_virtualenv\Scripts\python.exe -m doctest -v hello.py > out.txt
тест по-прежнему не проходит, но результат ошибки немного отличается:
Failed example:
test_func()
Expected:
u'☃'
Got:
u'\u2603'
Если я добавлю экранированный литерал Юникода в моем тесте:
# coding=utf-8
def test_func():
u"""
>>> test_func()
u'☃'
"""
return u'\\u2603'
тест проходит. Но, насколько я могу судить,u'\u2603'
а такжеu'☃'
следует оценить к тому же.
На самом деле у меня есть два вопроса о неудачном случае:
Является ли одно из представлений, которые дает врач (подExpected
или жеGot
) неверно для значения, которое имеет doctester для этого случая? (Т.е.x != eval(repr(x))
)Если нет, то почему тест не пройден?