pytes中的夹具参数输出

2024-06-26 15:01:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我坐下来好好学习py.测试今天又发现网站上的文档都掉了(pytest.org网站)因此,如果这个问题的答案在那里找到,我会道歉。在

我要做的是将两个fixture的输出传递给一个参数,如下所示:

import pytest

@pytest.fixture()
def make_1():
    return 1

@pytest.fixture()
def make_2():
    return 2

@pytest.mark.parametrize('arg', [make_1, make_2])
def test_main(arg):
    assert isinstance(arg, int)

但是测试失败了,因为没有将fixture的输出赋给参数“arg”,而是传递了fixture(函数)本身。在

如何用这种方式参数化各种装置的输出?在


Tags: 答案文档pyorgimport参数makereturn
1条回答
网友
1楼 · 发布于 2024-06-26 15:01:06

这[丑陋的/大规模的黑客攻击]会起作用吗?我很感激它远不是理想的——我不知道是否有一种方法可以创建一个惰性计算的fixture,让你做你想做的事情。在

import pytest

@pytest.fixture
def make_1():
    return 1

@pytest.fixture
def make_2():
    return 2

@pytest.fixture
def all_makes(make_1, make_2):
    return (make_1, make_2)

def _test_thing(make):
    # Run your test
    pass

def test_main(all_makes):
    for make in all_makes:
        try:
            _test_thing(make)
        except AssertionError:
            print "Failed for make {}".format(make)
            raise

一个可能更好的选择是参数化fixture本身(如果可能的话)-参考docs:https://pytest.org/latest/fixture.html#parametrizing-a-fixture

^{pr2}$

如果您不同的“制造”固定装置非常不同,您可以有类似于:

def build_make_1():
    return 1

def build_make_2():
    return 2

@pytest.fixture(params=[build_make_1, build_make_2])
def make(request):
    return request.param()

def test_make(make):
    # Run your test
    pass

相关问题 更多 >