我正在测试一个函数,该函数生成的结果在表示时会很长,而且我不知道如何将结果放入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')])
"""
结果行可能真的很长,我想知道是否有可能将其分成多行,例如...
的输入表达式
是,您可以为此使用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')])
"""
在这种情况下,您想使用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)