gpt4 book ai didi

python - 将实参或参数传递给固定功能

转载 作者:太空宇宙 更新时间:2023-11-03 18:24:42 24 4
gpt4 key购买 nike

我正在探索 py.test 中的装置,我有与一年多前提出的类似问题:Can params passed to pytest fixture be passed in as a variable?我想知道现在是否可以在较新版本的 py.test 中以某种方式选择要求固定功能的参数子集。

假设我有一个简单的函数和一个测试:

def func(a, b):
return (a - b)**3 + 10

@pytest.fixture(scope="module", params=[(7,11), (7,0), (3,0)])
def fix_func(request):
output = func(*request.param)
return output

def test_1(fix_func):
assert fix_func <= 500

现在我想仅为 param = (7,11) 添加第二个测试:

def test_2(fix_func):
assert fix_func > 0

如果仍然无法选择参数子集,解决此问题的另一种方法可能是将参数从固定装置移动到测试,如下所示:

@pytest.fixture(scope="module")
def fix_func(request, param):
output = func(*param)
return output

@pytest.mark.parametrize("arg", [(7,11), (7,0), (3,0)])
def test_1(fix_func(arg)):
assert fix_func <= 500

@pytest.mark.parametrize("arg", [(7,11)])
def test_2(fix_func(arg)):
assert fix_func > 0

但是这个例子也不起作用。是否有任何其他简短/“优雅”的方法来使用不同的 fixture 组进行不同的测试(仅编写一个 fixture 函数)?

最佳答案

您不能在另一个函数签名的已定义参数内嵌套函数调用。您需要将内部函数移至外部函数并在那里调用它:

@pytest.mark.parametrize("arg", [(7,11), (7,0), (3,0)])
def test_1(arg):
assert fix_func(arg) <= 500

关于python - 将实参或参数传递给固定功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com