2011-05-02 85 views
6

我正处于使用python作为软件QA工具的学习阶段。python doctest:预期的结果与“得到”结果相同,但测试失败

我写了下一个简单的测试,以便在文本文件数字矩阵中查找字母'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. 
+0

对于这个问题+1:这种错误很容易做出: -/ – 2014-03-13 10:01:40

回答

2

此:

return; 

让你的函数返回None

Did you mean return t


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

+1

其实在这种情况下,无论是“print t”还是“return t”似乎都会让doctest通过,只要你移除@Frank Schmitt提到了空间。既然“打印t”和“返回t”使得doctest_fail_因为它得到97_twice_。 – 2011-05-02 13:42:40

+0

但我同意这是一个奇怪的doctests用法(据我了解,你应该把doctests看作你可以检查的文档,而不是软件上的QA)。他们应该是独立自主的,而不是依赖于外部环境。 – 2011-05-02 13:55:10

11

在97之后你有一个额外的空间 - 如果你删除它,你的测试应该运行良好。

相关问题