我正在doctest.testmod()做一些基本的测试.我有一个返回长字符串的函数,比方说get_string().就像是:
def get_string(a, b):
r''' (a, b) -> c
>>> get_string(1, 2)
'This is \n\n a long \n string with new \
space characters \n\n'
# Doctest should work but does not.
'''
return ('This is \n\n a long \n string ' + \
'with new space characters \n\n')
Run Code Online (Sandbox Code Playgroud)
问题是doctest没有通过,因为它期望一个单行字符串,并且它将包裹视为一个\n字符.有办法解决这个问题吗?
PS:这不是我正在使用的实际功能,而是为您着想的最小版本.
您可以使用NORMALIZE_WHITESPACE选项(另请参阅完整的选项列表).
以下是doctest文档中的示例:
>>> print range(20) # doctest: +NORMALIZE_WHITESPACE
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Run Code Online (Sandbox Code Playgroud)
我认为你不明白它是如何doctest运作的.它并没有检查输出是否是某种"等效",它只检查是否输出相同(只有很轻微的可能的变型,如利用省略号).从文档:
该
doctest模块搜索看起来像交互式Python会话的文本片段,然后执行这些会话以验证它们是否完全如图所示工作.
Doctest将输出(不是字符串文字,python表达式或其他.原始输出字节)与您提供的示例输出的内容进行匹配.由于它不知道引号之间的文本表示字符串文字,因此无法根据需要对其进行解释.
换句话说:你唯一能做的就是简单地将整个输出放在一行上,如:
>>> get_string(1, 2)
'This is \n\n a long \n string with new space characters \n\n'
Run Code Online (Sandbox Code Playgroud)
如果输出太长,您可以尝试修改示例以生成更短的字符串(例如,将50其剪切为字符:) get_string(1, 2)[:50].如果你看一下不同项目的doctests,你会发现不同的hacks,使doctests更可读,同时提供可靠的输出.
| 归档时间: |
|
| 查看次数: |
2486 次 |
| 最近记录: |