【发布时间】:2020-06-29 16:58:52
【问题描述】:
我通常使用code auto-formatter Black,它训练我使用双引号。
使用双引号已成为我的“肌肉记忆”。
许多类的默认repr 使用单引号从Python 交互式输出中打印出来。我知道 doctest 试图重现 Python 交互式输出。
有没有一些简单的方法可以让 doctest 匹配单引号或双引号?
我知道一种选择是自定义doctest.OutputChecker。我想知道是否有更简单的选择。
代码示例
from dataclasses import dataclass
@dataclass
class SomeDataClass:
"""Contains a string."""
data: str
def get_some_dataclass(data: str) -> SomeDataClass:
"""Get a data class containing some specified data.
Returns:
Data class containing the data.
Examples:
>>> get_some_dataclass("hi")
SomeDataClass(data="hi")
"""
return SomeDataClass(data=data)
if __name__ == "__main__":
import doctest
doctest.testmod()
输出:
**********************************************************************
File "quote_or_apostrophe.py", line 23, in __main__.get_some_dataclass
Failed example:
get_some_dataclass("hi")
Expected:
SomeDataClass(data="hi")
Got:
SomeDataClass(data='hi')
**********************************************************************
版本
我通过 pytest 的 doctest integration 调用 doctest。
python==3.8.2
pytest==5.4.1
【问题讨论】:
-
鉴于测试输入是硬编码的,最简单的做法是在预期输出中使用单引号。 Python 不会在两者之间随意切换;
str.__repr__仅在字符串本身包含双引号时才使用双引号。此处并非如此,因此您可以使用单引号来依赖输出。
标签: python unit-testing doctest