【发布时间】:2022-11-12 09:24:30
【问题描述】:
首先,如果我做错了,请提前抱歉,这是我在stackoverflow上提出的第一个问题。所以请让我知道我的配方是否无效。
所以我正在做一个项目,我想对一个管道进行单元测试,该管道根据用户选择的参数以模块化方式调用多个函数。我对这个单元测试的目标是检查用户可以给出的所有可能的组合是否按预期工作。
所以我所拥有的是某些进程拥有并且我想使用的所有选项的列表多@pytest.mark.parametrize() 迭代它们并创建所有可能的组合。
因为使用这些参数创建了一个对象,并且我想将此设置用于多个测试函数,所以我想构建一个夹具,它采用这些参数(间接)并返回应该在测试函数中使用的对象。
这甚至可以通过间接参数化实现吗?
简化的设置如下所示:
PARAMETER1_LIST = ["option 1", "option 2", "option 3"]
PARAMETER2_LIST = ["value 1", "value 2"]
@pytest.fixture
def test_pipeline_class(request):
pipeline_parameters = []
for parameter in request.param:
pipeline_parameters.append(parameter)
test_pipeline = PipelineClass(pipeline_parameters)
return test_pipeline
@pytest.mark.parametrize("parameter1", PARAMETER1_LIST, indirect=True)
@pytest.mark.parametrize("parameter2", PARAMETER2_LIST, indirect=True)
def test_pipeline_combinations(parameter1, parameter2, test_pipeline_class):
print(test_pipeline_class.parameters)
# Further tests
我很确定我的代码有很多问题(例如对request.param 的迭代),但我想知道这是否可能,或者是否有另一种方法可以以更清洁的方式进行。
【问题讨论】:
标签: python pytest parameterized-unit-test