Jus*_*tin 8 python doctest python-3.x
我有一个返回多行字符串的 Python3 函数。我想用 doctest 测试它,但无法让它工作。我尝试使用该+NORMALIZE_WHITESPACE 指令但没有成功。
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()
Run Code Online (Sandbox Code Playgroud)
上面的代码失败并出现以下错误:
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'
Run Code Online (Sandbox Code Playgroud)
我尝试更改 doctest 行以包含文字,\n如下所示:
>>> dummy() # doctest: +NORMALIZE_WHITESPACE
'Hello Mum\n Hello Dad'
Run Code Online (Sandbox Code Playgroud)
但这失败了,并出现几乎相同的错误:
Failed example:
dummy() # doctest: +NORMALIZE_WHITESPACE
Expected:
'Hello Mum
Hello Dad'
Got:
'Hello Mum\n Hello Dad'
Run Code Online (Sandbox Code Playgroud)
如何使用 doctest 测试多行字符串输出?
正如我的评论中提到的,一种解决方法是,您不需要\ndoctest 字符串中的文字print,然后对其进行匹配,例如
def dummy():
"""Dummy test function
>>> a = dummy()
>>> print(a)
Hello Mum
Hello Dad
"""
return """Hello Mum
Hello Dad"""
if __name__ == "__main__":
import doctest
doctest.testmod()
Run Code Online (Sandbox Code Playgroud)
问题是\n被解释为文档字符串中的换行符,但 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()
Run Code Online (Sandbox Code Playgroud)
r如果您使用 a代替 ,它也可以在没有前导的情况下工作\\n,\n但最好坚持使用可r从 python REPL 复制粘贴的版本。
| 归档时间: |
|
| 查看次数: |
3502 次 |
| 最近记录: |