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
我添加了上标以供参考。您不必给所有人都添麻烦。
答案 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...
就优良作法而言,至少通过这种方式,我可以快速查看测试是否正在使用帮助程序功能,而不是从整个模块的模块中导入它,而仅在某些测试中使用它。