gpt4 book ai didi

python - 如何将复杂的类成员传递给 pytest 参数化装饰器

转载 作者:行者123 更新时间:2023-12-04 16:45:26 29 4
gpt4 key购买 nike

我需要将类成员作为参数传递给 pytest.mark.parametrize .
以下代码不起作用(我使用了简单的成员字符串,但在我的情况下,它们很复杂且构造良好):

import pytest
class TestSmth(object):
def setup_class(cls):
cls.a = "a"
cls.b = "b"
cls.c = "c"

@pytest.mark.parametrize("test_input,expected", [
(self.a, "a"),
(self.b, "b"),
(self.c, "c")
])
def test_members(test_input, expected):
assert test_input == expected

有可能达到这样的结果吗?
或者类似的东西?

最佳答案

此代码不起作用,因为 Python 装饰器 don't work that way .它与测试参数中的实际数据无关。如果您是编写装饰器的人,您可以 solve it by manually passing the instance ,但这取决于装饰者本身做正确的事情。

就目前而言,pytest 装饰器只是存储要验证的测试数据 - 因此您需要提供在运行脱糖代码时可访问的数据,如下所示:

o = TestSmth()
o.setup_class()

@pytest.mark.parametrize("test_input,expected", [
(o.a, "a"),
(o.b, "b"),
(o.c, "c")
])
def test_members(test_input, expected):
assert test_input == expected

我认为传递给这些函数的数据类型没有任何固有的限制。如果你仍然觉得这太局限了,pytest 有一个 substantial support用于自定义参数化方案。如果没有您实际使用的详细信息(而不是模拟示例),则很难说出什么最适合该问题。

关于python - 如何将复杂的类成员传递给 pytest 参数化装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48784042/

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