使用字典和默认值回退的 @pytest.mark.parametrize 的替代语法
项目描述
使用字典和默认值回退作为测试用例的 @pytest.mark.parametrize 的替代语法。
问题
使用 @pytest.mark.parametrize 参数化的测试,当参数数量增长时,很容易变得难以阅读。例如
@pytest.mark.parametrize(
"a, b, c, d, e, f, expect",
[
(3, "one", 4.0, 0x01, 0o5, 9e0, 0b10,),
(6, "five", 3.0, 0x05, 0o10, 9e0, 0b111,),
],
)
def test_my_func(a, b, c, d, e, f, expect):
assert my_func(a, b, c, d, e, f) == expect
解决方案
pytest-kwparametrize 使用字典而不是元组作为测试用例。这样,每个参数都始终有标签,并且更容易被读者识别。此外,测试函数的参数不需要像 @pytest.mark.parametrize 那样单独声明,并且测试用例不需要被列表括起来
@pytest.mark.kwparametrize(
dict(a=3, b="one", c=4.0, d=0x01, e=0o5, f=9e0, expect=0b10,),
dict(a=6, b="five", c=3.0, d=0x05, e=0o10, f=9e0, expect=0b111,),
)
def test_my_func(a, b, c, d, e, f, expect):
assert my_func(a, b, c, d, e, f) == expect
请参见下面的示例以了解其他功能。
示例
不带默认值的简单语法
@pytest.mark.kwparametrize(
dict(a=0, b=0, expect=0),
dict(a=1, b=0, expect=1),
)
def test_my_func(a, b, expect):
assert my_func(a, b) == expect
为参数定义默认值,以便它可以从测试用例中省略
@pytest.mark.kwparametrize(
dict(a=0, expect=0),
dict(a=1, expect=1),
dict(a=0, b=1, expect=0),
dict(a=1, b=1, expect=2),
b=0,
)
def test_my_func(a, b, expect):
assert my_func(a, b) == expect
您也可以像 @pytest.mark.parametrize 一样提供可迭代的测试用例(例如列表、元组、生成器)
@pytest.mark.kwparametrize(
[
dict(a=0, b=0, expect=0),
dict(a=1, b=0, expect=1),
]
)
def test_my_func(a, b, expect):
assert my_func(a, b) == expect
默认值也可以通过 defaults= 关键字参数作为字典传递(此处所有参数都有默认值)
@pytest.mark.kwparametrize(
dict(),
dict(a=1, expect=1),
dict(b=1),
dict(a=1, b=1, expect=2),
defaults=dict(a=0, b=0, expect=0),
)
def test_my_func(a, b, expect):
assert my_func(a, b) == expect
标记符与 fixtures 和 Pytest 的内置关键字参数一起工作
@pytest.mark.kwparametrize(
# test cases:
dict(),
dict(filename="special.txt", expect=1),
dict(content="special content"),
# default parameter values:
filename="dummy.txt",
content="dummy content",
expect=42,
# example of a Pytest built-in keyword argument:
ids=["with defaults", "special filename", "speial content"],
)
def test_my_func(tmpdir, filename, content, expect):
filepath = (tmpdir / filename)
filepath.write(content)
assert my_func(filepath) == expect
贡献者 ✨
请参阅 README.rst 了解贡献者列表。
此项目遵循 all-contributors 规范。欢迎任何类型的贡献!
项目详情
下载文件
下载适用于您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
pytest_kwparametrize-0.0.3.tar.gz (8.9 kB 查看哈希值)
构建分发
关闭
pytest_kwparametrize-0.0.3.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 728731e418b526cedbd63c58b9c40848f089ef3fac32abfc45a512c0d70557b6 |
|
| MD5 | 74fcf3aa49e174c5a79aeefd55125359 |
|
| BLAKE2b-256 | 45f3d46ba14711016f9d8a16360e6afe06a10e3193e2bed6c003c834b60967d2 |
关闭
pytest_kwparametrize-0.0.3-py3-none-any.whl的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 0a31377320cd23ff9399956940d6733df4eec8912153ac65f842f95a029d23cc |
|
| MD5 | 420686ff6d80a9ef0ec4e5386b3f5926 |
|
| BLAKE2b-256 | d305c40f85d629ade14bbad9b00db0c081591ad92fd850f69435846662427326 |