2011-05-02 169 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之後你有一個額外的空間 - 如果你刪除它,你的測試應該運行良好。

相關問題