2013-01-17 175 views
1

unittest失敗後繼續測試的最佳方式是什麼?Python單元測試失敗後繼續

#!/usr/env/bin python2.7 

import unittest 
from fib import fib 


class FibTests(unittest.TestCase): 

    def test_0(self): 
     self.assertEqual(fib(0), 0) 
     self.assertEqual(fib(1), 1) 
     self.assertEqual(fib(2), 1) 
     self.assertEqual(fib(5), 5) 
     self.assertEqual(fib(10), 55) 

    def test_1(self): 
     self.assertEqual(fib(0), 1) 

    def test_2(self): 
     self.assertEqual(fib(1), 0) 
     self.assertEqual(fib(5), 0) 

if __name__ == '__main__': 
    suite = unittest.TestLoader().loadTestsFromTestCase(FibTests) 
    result = unittest.TextTestRunner(verbosity=2).run(suite) 

看着test_2,它只會告訴我有1次失敗而不是2

此外,我怎麼能收集在最後的結果說明:

test_0 -- 0 failures 
test_1 -- 1 failures 
test_2 -- 2 failures 

動機

我正在嘗試創建一個測試遊戲。人們提交測試,如果他們失敗了,他們會得到積分;每個測試失敗都是一個點。提供這種能力的最簡單方法是什麼?

+2

要想單獨跟蹤其失敗的事情應該是單獨的測試。 – BrenBarn

+0

每個斷言都會導致失敗。如果你想讓他們成爲他們自己的測試用例,你需要讓他們成爲他們自己的測試用例方法。 – monkut

回答

1

你必須將每個測試用例分成不同的方法。爲了更容易地創建新的測試/保存輸入時間,您可以基於這樣的輸入自動生成測試用例

#!/usr/env/bin python2.7 

import unittest 
from fib import fib 


class FibTests(unittest.TestCase): 
    pass 

def test_gen(expected, actual): 
    def test_method(self): 
     return self.assertEqual(expected, actual) 
    return test_method 

if __name__ == '__main__': 
    cases = ((fib(1), 1), (fib(2), 1), (fib(5), 5)) 
    for index, case in enumerate(cases): 
     test_name = 'test_{0}'.format(index) 
     test = test_gen(case[1], case[0]) 
     setattr(FibTests, test_name, test) 
    suite = unittest.TestLoader().loadTestsFromTestCase(FibTests) 
    result = unittest.TextTestRunner(verbosity=2).run(suite) 
+1

你可以像這樣做一些麻煩事,或者你可以使用'nose',它支持發電機測試功能。 –

+0

現在正在使用鼻子。 – prafulfillment