Неожиданные ошибки при тестировании кода Python с помощью doctest - PullRequest
0 голосов
/ 31 марта 2020

Я использую doctest для проверки своего кода, и я получаю неожиданную ошибку при тестировании простой функции, которая выдает две строки текстового вывода. Почему?

Python 3.6.9 в Ubuntu 18.04. Та же ошибка может наблюдаться с Python 2.7 и Python 3.9.

Тестовой программой (сохраненной как doctest-bugs.py):

#!/usr/bin/env python3

def testme():
    """
    Emit test message.

    >>> testme()
    First line (no leading spaces)
     Second line (one leading space)
    """
    return """First line (no leading spaces)
 Second line (one leading space)"""

Обычный запуск:

$ python3 doctest-bugs.py

Тестирование с помощью doctest:

$ python3 -m doctest doctest-bugs.py 
**********************************************************************
File "/home/filip/doctest-bugs.py", line 7, in doctest-bugs.testme
Failed example:
    testme()
Expected:
    First line (no leading spaces)
     Second line (one leading space)
Got:
    'First line (no leading spaces)\n Second line (one leading space)'
**********************************************************************
1 items had failures:
   1 of   1 in doctest-bugs.testme
***Test Failed*** 1 failures.

Все строки являются дословными, и единственное начальное пространство должно быть без проблем распознано согласно документации модуля.

1 Ответ

1 голос
/ 16 апреля 2020

Функция не выдает две строки вывода; он возвращает строку, содержащую две строки.

>>> testme()
'First line (no leading spaces)\n Second line (one leading space)'

Возможно, вы путаете возврат с печатью.

>>> print(testme())
First line (no leading spaces)
 Second line (one leading space)

Вот рабочий пример:

def testme():
    """
    >>> testme()
    'First line (no leading spaces)\\n Second line (one leading space)'
    >>> print(testme())
    First line (no leading spaces)
     Second line (one leading space)
    """
    return """First line (no leading spaces)
 Second line (one leading space)"""
...