1

我有一些只返回一个类的对象的装置。这些对象包含我试图在 pytest 中验证的该类的属性,因此代码如下所示:

from main import My_class
import pytest

@pytest.fixture()
def fixt1():
    object1 = My_class("atr1", "atr2")
    return object1

@pytest.fixture()
def fixt2():
    object2 = My_class("atr3", "atr4")
    return object2

@pytest.mark.parametrize('inputs, results',
                         [
                            (fixt1, 10.0),
                            (fixt2, 22.5)
                         ]
                         )
def test_fixts(inputs, results):
    assert inputs.price == results

此代码将始终返回属性错误:

AttributeError: 'function' object has no attribute 'price'

但是,尝试使用像这样的简单测试来测试这些属性将起作用:

def test_simple(fixt1):
    assert fixt1.price == 10.0

我可以就这个问题获得一些建议,因为我在任何地方都找不到关于如何在参数化中正确调用对象属性的说明?

非常感激!

4

1 回答 1

1

夹具不能像函数一样使用——它们必须在测试函数或其他夹具中用作参数。在参数中,mark.parametrize您可以改用普通函数:

def param1():
    return My_class("atr1", "atr2")

def param2():
    return My_class("atr3", "atr4")

@pytest.mark.parametrize('inputs, results',
                         [
                            (param1(), 10.0),
                            (param2(), 22.5)
                         ]
                         )
def test_fixts(inputs, results):
    assert inputs.price == results

请注意,您只能使用可以在加载时执行的函数,因为mark.parametrize装饰器是在加载时评估的,因此它不能依赖于任何运行时更改。

于 2020-09-21T04:37:32.427 回答