Многострочные операторы возвращаемого значения в Python документах - PullRequest
0 голосов
/ 14 марта 2020

Я тестирую функцию, которая выдает очень длинные результаты при представлении, и я не знаю, как вписать этот результат в doctest.

В этом примере я использую pscyopg2, который имеет подробные представления для составленных запросов ( подробности о том, почему )

from psycopg2.sql import Literal, Composed

def foo(a, b):
  """
  Examples:
    >>> foo('one', 'two')
    Composed([SQL('SELECT * FROM my_table WHERE a='), Literal('one'), SQL(' AND b='), Literal('two')])
  """

Строка результата может быть очень длинной, и мне интересно, возможно ли разбить ее на несколько строки, как входное выражение с ...

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Да, для этого вы можете использовать опцию NORMALIZE_WHITESPACE.

Из документации модуля doctest :

doctest. NORMALIZE_WHITESPACE

Если указано, все последовательности пробелов (пробелы и новые строки) считаются равными. Любая последовательность пробелов в ожидаемом выводе будет соответствовать любой последовательности пробелов в фактическом выводе. По умолчанию пробелы должны точно совпадать. NORMALIZE_WHITESPACE особенно полезен, когда строка ожидаемого вывода очень длинная , и вы хотите обернуть ее в несколько строк в вашем источнике.

второй акцент мой

Либо используйте эту опцию для командной строки при запуске doctest:

python -m doctest -o NORMALIZE_WHITESPACE my_module.py

Или добавьте опция директива для вашего примера кода:

def foo(a, b):
    """
    Examples:
       >>> foo('one', 'two') # doctest: +NORMALIZE_WHITESPACE
       Composed([SQL('SELECT * FROM my_table WHERE a='),
                 Literal('one'), SQL(' AND b='), Literal('two')])
    """
0 голосов
/ 14 марта 2020

В этом случае вы хотите использовать флаг NORMALIZE_WHITESPACE:

def foo('one', 'two')
    """
    Examples:
        >>> foo('one', 'two')
        Composed([
           SQL('SELECT * FROM my_table WHERE a='), Literal('one'),
           SQL(' AND b='), Literal('two')
        ])
    """

if __name__ == '__main__':
    import doctest

    doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE)
...