Python doctests中的多行返回值语句

问题描述 投票:-1回答:2

我正在测试一个函数,该函数生成的结果在表示时会很长,而且我不知道如何将结果放入doctest中。

在此示例中,我使用的是pscyopg2,它的合成查询(details as to why)具有冗长的表示形式

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')])
  """

结果行可能真的很长,我想知道是否有可能将其分成多行,例如...的输入表达式

python multiline doctest
2个回答
1
投票

是,您可以为此使用NORMALIZE_WHITESPACE选项。

documentation of the doctest module

doctest。NORMALIZE_WHITESPACE

指定时,所有空白序列(空白和换行符)均被视为相等。预期输出中的任何空格序列都将匹配实际输出中的任何空格序列。默认情况下,空格必须完全匹配。 NORMALIZE_WHITESPACE在预期的输出行很长时特别有用,并且您希望将其包装在源代码中的多行中。

第二重点矿

运行doctest时,都可以将其用作命令行的选项:

python -m doctest -o NORMALIZE_WHITESPACE my_module.py

或在您的代码示例中添加option directive

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
投票

在这种情况下,您想使用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)
© www.soinside.com 2019 - 2024. All rights reserved.