2010-06-29 2 views
3

내가하고 싶은 것은 사람들이 테스트를 위해 파일에 넣을 수있는 폴더를 만들고 pyunit을 자동으로 확장하여 별도의 테스트로 테스트를 실행하는 것입니다. 현재, 내가 무엇을하고 있어요 것은 :가변 수의 테스트를 가진 PyUnit

class TestName(unittest.testcase): 
    def setUp(self): 
     for file in os.listdir(DIRECTORY): 
      # Setup Tests 

    def test_comparison(self): 
     for file in os.listdir(DIRECTORY): 
      # Run the tests 

def suite(): 
    return unittest.TestSuite([ 
unittest.TestLoader().loadTestsFromTestCase(TestName), 
]) 

if __name__ == "__main__": 
    unittest.TextTestRunner(verbosity=2).run(suite()) 

물론 이러한 모든 테스트가 실패하는 경우 등 그 많은 문제가, 모든 일에 실패, 등 등 내가하고 싶은 무엇, 설정 pyunit을 사용하여 디렉토리에있는 각 파일에 대해 테스트 (또는 테스트 케이스)를 실행합니다. 자, 내가 할 수있는 생각하고 그냥 두 가지 방법으로 위의 클래스를 만드는 것입니다,하지만 성공적으로 수행하기 위해, 나는, 컨텍스트 매개 변수에 추가해야합니다 예 :

def setUp(self, filepath): 
    # Do stuff 

그럼이 코드의 주요 덩어리에 루프를 넣어 실행 테스트를 다음과 같이 수 :

def suite(): 
    return unittest.TestSuite([ 
unittest.TestLoader().loadTestsFromTestCase(TestName, file), 
]) 

if __name__ == "__main__": 
    for file in DIRECTORY: 
     unittest.TextTestRunner(verbosity=2).run(suite(file)) 

을하지만 내가하는 방법을 모르겠어요이 거의 구멍 unittest.TestCase() 클래스를 재 작성하지 않고. 내가 할 수있는 방법이 있습니까? 또는 폴더에 얼마나 많은 파일이 있는지에 따라 테스트 세트/테스트 케이스를 동적으로 확장 할 수있는 다른 방법이 있습니까? 감사.

답변

2

test generators에 대해 nose을 사용할 수 있습니다. 이 모양은 다음과 같습니다.

def test_comparison(): 
    for file in os.listdir(DIRECTORY): 
     yield run_cmp_test, file 

def run_cmp_test(file): 
    # Run the tests 

또는 py.test에서 funcargs 일 수도 있습니다.

+0

사람들은 단위 테스트를 발견하기위한 도구처럼 보인다. 어쩌면 내가 폴더에 넣을 파일은 표준 알고리즘으로 처리 할 수있는 데이터 파일 (이진 파일 및 이미지)임을 분명히해야합니다. 따라서 각 파일에 대해 개별 테스트가 작성되어 있지 않으면 사용 방법을 알 수 없습니다. –

+0

아, 그래. 나는 원래의 질문에서 그것을 얻지 못했습니다. 그래서 당신은 'x in y : test (x)'문제를 다루려고합니다. 여기서 문제는 특정 'x'에서 실패하지만, 관계없이 'y'에서 모두 실행하려고합니다. –

+0

기본적으로 예입니다. 또한 개별 테스트와 비슷한 형식으로 사용자에게 출력하고 싶습니다. 그러나 일단이 작업을 실행하면 그 작업은 간단합니다. 고맙습니다. –

2

좋아, 내 질문에 대한 답변을 찾은 것 같습니다. 나는 전역 네임 스페이스를 사용하고 있다고 말할 수는 있지만, 어떤 이유로 든 네임 스페이스에 대한 나의 평상적인 지식은 평평하게 떨어졌다.

class TestImage(unittest.TestCase) 
    pass #Do stuff, as well as using the filename variable 

def suite(): 
    return unittest.TestSuite([ 
unittest.TestLoader().loadTestsFromTestCase(TestImage), 
]) 

if __name__ == "__main__": 
    for filename in os.listdir(sys.path[0]): 
     unittest.TextTestRunner(verbosity=2).run(suite()) 

이렇게하면 디렉토리의 모든 파일 이름에 대한 테스트 사례가 실행됩니다. (및 폴더 이름). 왜 내가 unittest 클래스에서 filename을 사용할 수 있는지 모르겠지만. 이러한 매크로가 클래스를로드하고 실행하는 방식과 관련이 있어야합니다.

0

는이 같은 testscenarios, 모듈, 뭔가이 작업을 수행 할 수 있습니다

class MyTest(unittest.TestCase): 

    scenarios = [os.listdir(sys.path[0])] 

    ... 
관련 문제