2013-07-02 28 views
9

Ho una classe per testare parte del mio codice. Vorrei parametrizzare la configurazione e rieseguire la classe con diversi parametri:py.test test parametrizing classes

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 

Vorrei eseguire questa classe che va da t = 2000 at = 20000 in passi di 1.000

+0

Che cosa hai provato? Ci sono documenti per [funzioni di test parametrizzate] (http://pytest.org/latest/parametrize.html#parametrized-test-functions) e per [fixtures] (http://pytest.org/latest/fixture.html# apparecchio) che fanno proprio questo. –

risposta

15

Invece di vostro setup funzione, creare un dispositivo di prova parametrizzata:

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 "dispositivo di prova parametrizzata" è quella in cui, quando lo si utilizza in un banco di prova, pytest creerà un nuovo banco di prova per ciascun parametro ed eseguire ogni separatamente.

si utilizza il dispositivo di prova aggiungendo un argomento funzione chiamata "plasma" a ciascuna delle funzioni di test che lo vogliono:

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 si occupa di raccogliere infissi, raccogliendo funzioni di test, capire quale test le funzioni richiedono quali dispositivi e il passaggio dei valori delle fixture alle funzioni di test per l'esecuzione.

Partenza la documentazione per maggiori dettagli: http://pytest.org/latest/fixture.html#fixture-parametrize