2013-07-02 2 views
9

제 코드를 테스트 할 클래스가 있습니다.py.test는 테스트 클래스를 매개 변수화합니다.

class TestNormalLTEPlasma: 


    def setup(self, t=10000): 
     self.plasma = plasma.LTEPlasma.from_abundance(t, {'Si':1.0}, 1e-13, atom_data, 10*86400) 

    def test_beta_rad(self): 
     assert self.plasma.beta_rad == 1/(10000 * constants.k_B.cgs.value) 

    def test_t_electron(self): 
     assert self.plasma.t_electron == 0.9 * self.plasma.t_rad 

    def test_saha_calculation_method(self): 
     assert self.plasma.calculate_saha == self.plasma.calculate_saha_lte 

내가하는 대신 설치 1000

+0

무엇을 시도 했습니까? [매개 변수 테스트 기능] (http://pytest.org/latest/parametrize.html#parametrized-test-functions) 및 [fixtures] (http://pytest.org/latest/fixture.html#)에 대한 문서가 있습니다. 고정 장치). –

답변

15

의 단계 = 20000 T로 t에서 = 2000가는이 클래스를 실행하고 싶습니다 : 내가 설정 변수화 다른 매개 변수를 사용하여 클래스를 다시 실행하고 싶습니다 함수, 매개 변수화 테스트 픽스처를 만들 :

ts = range(2000, 20001, 1000) # This creates a list of numbers from 2000 to 20000 in increments of 1000. 

@pytest.fixture(params=ts) 
def plasma(request): 
    return plasma.LTEPlasma.from_abundance(request.param, {'Si':1.0}, 1e-13, atom_data, 10*86400) 

A "매개 변수화 테스트 픽스처는"당신이 테스트 케이스에 사용하는 경우, pytest 각 매개 변수에 대한 새로운 테스트 케이스를 작성하고 개별적으로 각각의 실행 것입니다.

class TestNormalLTEPlasma: 

    def test_beta_rad(self, plasma): 
     assert plasma.beta_rad == 1/(10000 * constants.k_B.cgs.value) 

    def test_t_electron(self, plasma): 
     assert plasma.t_electron == 0.9 * plasma.t_rad 

    def test_saha_calculation_method(self, plasma): 
     assert plasma.calculate_saha == plasma.calculate_saha_lte 

pytest이기구를 수집하는 테스트 기능을 수집하는 테스트를 파악을 담당 :

당신이 원하는 시험의 각 기능에 "플라즈마"라는 함수 인수를 추가하여 테스트 픽스처를 사용 함수는 어떤 조명기를 필요로하고, 실행을 위해 조명기 값을 테스트 함수에 전달합니다.

자세한 내용은 문서를 참조하십시오. http://pytest.org/latest/fixture.html#fixture-parametrize