使用字典和默认值回退的 @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 |