2011-11-23 98 views
2

我有此腳本assertRaises沒有發現錯誤

import unittest,itertools,random 

##testclass 
class Testcomb(unittest.TestCase): 

    def test_input(self): 
     self.assertRaises(TypeError,calculate_combinations,dict(comb1), 5) 

def calculate_combinations(combin,target): 
    counter = 0 
    for L in range(0, len(combin)+1): 
     for subset in itertools.combinations(combin, L): 
     if sum(subset) == target: counter= counter+1 
    return counter 

comb1=[1,2,3,4] 


if __name__=='__main__': unittest.main() 

self.assertRaises(TypeError,calculate_combinations,dict(comb1), 5)不攔截異常給我這個錯誤:

E.. 
====================================================================== 
ERROR: test_input (__main__.Testcomb) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "total_combination.py", line 25, in test_input 
    self.assertRaises(TypeError,calculate_combinations,dict(comb1), 5) 
TypeError: cannot convert dictionary update sequence element #0 to a sequence 

---------------------------------------------------------------------- 
Ran 3 tests in 0.000s 

FAILED (errors=1) 

誰能幫助?

回答

3

使您的測試失敗的異常由斷言的dict(comb1)部分觸發。

>>> comb1=[1,2,3,4] 
>>> dict(comb1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: cannot convert dictionary update sequence element #0 to a sequence 

相反,在assertRaises將返回True只有當它是可調用的(在你的情況calculate_combinations)來觸發它。

HTH!

+0

謝謝我是白癡 – kurojishi

+0

@kurojishi即使是最好的有時也會失敗! ;)如果它解決了您的問題,請將答案標記爲已接受。 :) – mac

+0

30秒,它會解鎖 – kurojishi