2012-02-24 3 views
6

현재 테스트 프레임 워크에 내장 된 pythons를 사용하여 작성된 일련의 파이썬 단위 테스트에서 작업합니다. 필자가 제공 한 데이터 세트를 기반으로 여러 번 실행되는 테스트를 작성하고 싶습니다.Python의 단위 테스트 Paramaterize

즉. 내 데이터 세트가 [1,2,3,4]이면 내 데이터 세트의 입력을 사용하여 테스트 기능이 네 번 실행됩니다.

def test(data): 
    if data > 0: 
     #Pass the test 

필자는 테스트 기능에 루프를 넣지 않는 한 현재 프레임 워크에서이 기능을 사용할 수 없습니다. 하나의 입력이 실패하더라도 테스트를 계속 실행해야하므로이 작업을 수행하고 싶지 않습니다.

코 또는 pyTest를 사용하는 것이 가능하다는 것을 알았습니다. 어느 것이 가장 좋은 프레임 워크인가? 거기에 사용할 수있는 또 다른 프레임 워크가 있을까요?

미리 감사드립니다.

답변

6

최근에 funcargs이 추가 된 가장 일반적인 용도 중 하나는 py.test입니다. 귀하의 경우에는

당신은 얻을 것이다 :

def pytest_generate_tests(metafunc): 
    if 'data' in metafunc.funcargnames: 
     metafunc.parametrize('data', [1,2,3,4]) 

def test_data(data): 
    assert data > 0 

[편집] 아마 당신은 또한 단순히

@pytest.mark.parametrize('data', [1,2,3,4]) 
def test_data(data): 
    assert data > 0 

로 그래서 내가 말할 거라고 할 수있는 추가해야 평가 .test은 매개 변수화 된 단위 테스트를위한 훌륭한 프레임 워크입니다 ...

1
당신은 동적으로 다음과 같은 방법으로 설정 한 데이터를 기반으로 테스트를 만들 수 있습니다

: 질문 Python unittest: Generate multiple tests programmatically? 동적 시험의 여러 인스턴스를 생성하여 같은 일을 달성 another approach를 포함하여 더 많은 토론을 가지고

import unittest 

data_set = [1,2,3,4] 

class TestFunctions(unittest.TestCase): 
    pass # all your non-dynamic tests here as normal 

for i in data_set: 
    test_name = "test_number_%s" % i # a valid unittest test name starting with "test_" 
    def dynamic_test(self, i=i): 
     self.assertTrue(i % 2) 
    setattr(TestFunctions, test_name, dynamic_test) 

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

케이스를 테스트 스위트에 넣습니다.