python doctest:预期结果与“实际”结果相同,但测试失败

10 投票
2 回答
2784 浏览
提问于 2025-04-16 16:48

我现在正在学习如何使用Python来进行软件质量保证。

我写了一个简单的测试,目的是在一个文本文件的数字矩阵中找到字母'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.

2 个回答

2

这个:

return;

会让你的函数返回 None

你是不是想写 return t 呢?


另外,我认为 doctest 测试应该是自给自足的。用户应该能在你的文档中看到这些内容,并且不需要额外的背景知识就能理解。在你的例子中,你使用了一个模块内部的 arr_fin_1 对象,这对用户来说是完全不透明的。最好在调用 find_letter 之前在 doctest 中定义它,这样可以提供一个完整的示例。

14

你在97后面多了一个空格——如果把它去掉,你的测试就能正常运行了。

撰写回答