【问题标题】:Python doctests: test for NonePython doctests:测试无
【发布时间】:2013-11-18 12:12:04
【问题描述】:

使用 Python 2.7 我正在尝试测试特定函数调用的结果是否为无

我希望这些测试能够通过(请原谅这个相当愚蠢的例子)

def six_or_none(val):
    """
    >>> six_or_none(6)
    6
    >>> six_or_none(4)
    None
    """
    if val == 6:
        return 6
    return None

但是它们会产生以下结果

Failed example:
    six_or_none(4)
Expected:
    None
Got nothing

在 doctests 中测试 None 的正确方法是什么?

【问题讨论】:

    标签: python doctest


    【解决方案1】:

    Python 解释器忽略 None 返回值,所以 doctests 做同样的事情。

    改为测试is None:

    >>> six_or_none(4) is None
    True
    

    【讨论】:

    • Martijn,你知道忽略 None 的动机吗?
    • @EdgarAroutiounian: None 是默认的“我必须返回 something 但如果我被允许不返回任何东西我会这样做”返回值。跨度>
    • @EdgarAroutiounian:如果您确实回显了所有 None 输出,那么您将永远不会读完。
    • 我想知道为什么 doctest 不只是将仅包含“None”行的预期输出视为空;也许这个原则是为了避免让在交互式解释器中手动检查文档示例的用户感到惊讶?
    【解决方案2】:

    其他选项是直接检查None:

    def six_or_none(val):
        """
        >>> six_or_none(6)
        6
        >>> six_or_none(4)
        """
        if val == 6:
            return 6
        return None
    

    【讨论】:

      【解决方案3】:

      如果您想要在您的文档中看起来像您期望的那样,另一种选择是:

      >>> print(six_or_none(4))
      None
      

      【讨论】:

        猜你喜欢
        • 2013-06-30
        • 2017-07-09
        • 1970-01-01
        • 1970-01-01
        • 2021-05-05
        • 1970-01-01
        • 2011-05-14
        • 2014-06-14
        • 1970-01-01
        相关资源
        最近更新 更多