【问题标题】:python doctest: expected result is the same as the "got" result but the test failedpython doctest:预期结果与“得到”结果相同,但测试失败
【发布时间】:2011-05-02 11:20:22
【问题描述】:

我正处于使用 python 作为软件 QA 工具的学习阶段。

我编写了下一个简单的测试,以便在文本文件数字矩阵中找到字母“a”。 问题是即使期望与我得到的相同,测试也会失败。

这是为什么呢?你能告诉我我做错了什么吗?

测试脚本:

fin = open("abc.txt", "r")

arr_fin = []

for line in fin:
    arr_fin.append(line.split())

print arr_fin

for row in arr_fin:     
   arr_fin_1 = " ".join('{0:4}'.format(i or " ") for i in row) 
   print arr_fin_1



def find_letter(x, arr_fin_1):
    """
    >>> find_letter('a', arr_fin_1)
    97 
    """
    t=ord(x) #exchange to letter's ASCII value
    for i in arr_fin_1:
        if i==x:
            print t
            return;

def _test():
    import doctest
    doctest.testmod()

if __name__ == "__main__":
    _test()

错误信息:

Expected:
    97 
Got:
    97
**********************************************************************
1 items had failures:
   1 of   1 in __main__.find_letter
***Test Failed*** 1 failures.

【问题讨论】:

  • 问题+1:这种错误很容易犯:-/

标签: python doctest


【解决方案1】:

您在 97 之后有一个额外的空间 - 如果您删除它,您的测试应该可以正常运行。

【讨论】:

    【解决方案2】:

    这个:

    return;
    

    让你的函数返回None

    你是说return t吗?


    除此之外,恕我直言doctest 测试是独立的。这是用户应该在您的文档中看到并在没有上下文的情况下理解的内容。在您的示例中,您使用的是模块本地 arr_fin_1 对象,该对象对用户完全不透明。最好在 find_letter 调用之前的 doctest 中定义它,以提供一个独立的示例。

    【讨论】:

    • 实际上在这种情况下,只要您删除@Frank Schmitt 提到的空格,“print t”或“return t”似乎都可以通过 doctest。同时拥有 "print t" 和 "return t" 会使 doctest fail 因为它得到 97 twice
    • 但我同意这是一个奇怪的 doctests 用法(据我了解,您应该将 doctests 视为您可以检查的文档,而不是您软件的 QA)。它们应该是紧密独立的,不依赖于外部环境。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2019-01-02
    相关资源
    最近更新 更多