2013-01-17 3 views
1

unittest에서 실패 후 테스트를 계속하는 가장 좋은 방법은 무엇입니까?실패 후 Python Unittests 계속

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

동기 부여 :

#!/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 보면, 그것은 단지 내가 진술 끝에 결과를 수집 할 수있는 방법, 또한 대신 2

1 장애가있어 나에게 말해주지 :

테스트 게임을 만들려고합니다. 사람들은 테스트를 제출하고 다른 프로그램에 실패하면 점수를 얻습니다. 각각의 테스트 실패는 하나의 포인트입니다. 이 유형의 기능을 제공하는 가장 쉬운 방법은 무엇입니까?

+2

개별적으로 추적해야하는 장애는 별도의 테스트 여야합니다. – BrenBarn

+0

각 assert가 실패합니다. 각각을 자신의 테스트 케이스로 삼기를 원하면 자체 테스트 케이스 메소드를 만들어야한다. – 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