pytest-辅助功能或固定装置,参数化

时间:2018-08-24 10:17:27

标签: python parameter-passing pytest fixtures helper-functions

pytest设置主要基于固定装置,我喜欢这种方法,因为它更具原子性,明确性,并且较少限制xUnit中的类继承。是否有任何约定或准则来制作固定装置而不是辅助函数? 1 考虑以下代码:

def create_flavored_cake(flavor):
    return Cake(flavor)

def test_chocolate():
    cake = create_flavored_cake('chocolate')
    assert cake.is_yummy()

def test_broccoli():
    cake = create_flavored_cake('broccoli')
    assert cake.is_yummy()

def test_broccoli_with_risins():
    cake = create_flavored_cake('broccoli')
    cake.add('risins')
    assert cake.is_yummy()

应该将create_flavored_cake转换为夹具吗? 2 这样的场景(测试具有相同的语句但参数不同)是否应该触发我将辅助函数转换为夹具,从而更容易进行参数化和减少重复吗? 3 我应该只将夹具用于安装和拆卸吗? 4 还是没有关系,并且按照惯例,如果有的话,应该从一开始就使用夹具? 5

我不太喜欢用indirect参数化灯具,但似乎没有更好的方法。是不是因为这是不好的做法? 6 我知道我也可以使用pytest.mark.parametrize,它看起来会更好IMO。那么我应该在使用夹具,辅助函数和其他方法(如果有更好的解决方案)之间划清界限的地方,还要考虑到对它们进行参数化设置? 7

我添加了上标以供参考。您不必给所有人都添麻烦。

1 个答案:

答案 0 :(得分:0)

在必须执行此操作的情况下,我只创建了一个返回我的函数的夹具。我同意间接方法似乎只会创建难看的代码。

@pytest.fixture
def generate_data():
    def generate_data_function(some_parameters):
        # Code goes here
    return generate_data_function

def test_something(generate_data):
    my_test_parameters = # something
    generate_data(my_test_parameters)

    # Do test...

就优良作法而言,至少通过这种方式,我可以快速查看测试是否正在使用帮助程序功能,而不是从整个模块的模块中导入它,而仅在某些测试中使用它。