首页 > 解决方案 > 如何为带有参数的单个参数化 pytest 夹具提供默认值?

问题描述

我正在使用具有可变返回值的 pytest 参数化夹具。

这是一个简化的例子:

import pytest


@pytest.fixture
def mocked_value(mock_param):
    if mock_param:
        mocked_value =  "true"
    else:
        mocked_value = "false"
    yield mocked_value


@pytest.mark.parametrize(("mock_param"), [True, False])
def test_both_mocked_parameters(mocked_value, mock_param):
    assert mocked_value == str(mock_param).lower()


@pytest.mark.parametrize(("mock_param"), [True])
def test_just_one_mocked_param(mocked_value, mock_param):
    assert mocked_value == "true"

有没有办法让 pytest 固定装置有一个默认参数?像这样的东西,除了内置在单个夹具定义中:

def _mocked_function(mock_param):
    if mock_param:
        mocked_value =  "true"
    else:
        mocked_value = "false"
    return mocked_value

@pytest.fixture
def mocked_value_with_default():
    yield _mocked_function(True)

@pytest.fixture
def mocked_value(mock_param):
    yield _mocked_function(mock_param)


@pytest.mark.parametrize(("mock_param"), [True, False])
def test_both_mocked_parameters(mocked_value, mock_param):
    assert mocked_value == str(mock_param).lower()


def test_just_one_mocked_param(mocked_value_with_default):
    assert mocked_value_with_default == "true"

上述方法可行,但是只有一个夹具定义处理两个用例会更简洁。我该怎么做呢?

标签: pythonpython-3.xpytest

解决方案


推荐阅读