2013-07-02 103 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 

我想运行这个类在t会= 2000在1000

+0

你尝试过什么?有[参数化测试功能]的文档(http://pytest.org/latest/parametrize.html#parametrized-test-functions)和[fixtures](http://pytest.org/latest/fixture.html#夹具)就是这样做的。 –

回答

15

而不是你的设置步骤,T = 20000功能,创建一个参数化测试夹具:

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