Python doctests中的多行返回值语句

2024-10-01 02:20:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试一个函数,该函数生成的结果在表示时非常长,我不知道如何将该结果放入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')])
  """

结果行可能会变得很长,我想知道是否有可能将其分解为多行,比如带有...的输入表达式


Tags: to函数fromsqlfooasdetailsone
2条回答

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

documentation of the doctest module开始:

doctest.NORMALIZE_WHITESPACE

When specified, all sequences of whitespace (blanks and newlines) are treated as equal. Any sequence of whitespace within the expected output will match any sequence of whitespace within the actual output. By default, whitespace must match exactly. NORMALIZE_WHITESPACE is especially useful when a line of expected output is very long, and you want to wrap it across multiple lines in your source.

第二重点矿山

在运行doctest时,将此选项用作命令行的选项:

python-m doctest-o规范化_空格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')])
    """

在这种情况下,您希望使用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)

相关问题 更多 >