我有一个Python3函数,该函数返回多行字符串。我想用doctest对其进行测试,但无法使其正常工作。我尝试使用+NORMALIZE_WHITESPACE
directive失败。
def dummy():
"""Dummy test function
>>> dummy() # doctest: +NORMALIZE_WHITESPACE
'''Hello Mum
Hello Dad'''
"""
return """Hello Mum
Hello Dad"""
if __name__ == "__main__":
import doctest
doctest.testmod()
上面的代码因此错误而失败:
File "c:/foo.py", line 5, in __main__.dummy
Failed example:
dummy() # doctest: +NORMALIZE_WHITESPACE
Expected:
'''Hello Mum
Hello Dad'''
Got:
'Hello Mum\n Hello Dad'
我尝试如下更改doctest行以包含文字\n
:
>>> dummy() # doctest: +NORMALIZE_WHITESPACE
'Hello Mum\n Hello Dad'
但是此操作失败,并显示几乎相同的错误:
Failed example:
dummy() # doctest: +NORMALIZE_WHITESPACE
Expected:
'Hello Mum
Hello Dad'
Got:
'Hello Mum\n Hello Dad'
如何使用doctest测试多行字符串输出?
问题是\n
被解释为docstring中的换行符,但是doctest在其中需要文字反斜杠。
doctest帮助说(强调我的::)>
如果在交互式会话中通过反斜杠继续一行,或出于任何其他原因,请使用反斜杠
,则应使用原始文档字符串,该字符串将在键入时完全保留反斜杠所以他们建议以下内容(注意
r
之前的"""
:]
def dummy(): r"""Dummy test function >>> dummy() 'Hello Mum\n Hello Dad' """ return """Hello Mum Hello Dad""" if __name__ == "__main__": import doctest doctest.testmod()
如果您使用
r
而不是\\n
,也可以不使用前导\n
来工作,但最好使用可从python REPL复制粘贴的r
版本。