【发布时间】:2020-09-21 12:39:45
【问题描述】:
我有一些只返回一个类的对象的装置。这些对象包含我试图在 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
我能否就这个问题获得一些建议,因为我在任何地方都找不到关于如何在参数化中正确调用对象属性的说明?
非常感谢!
【问题讨论】:
-
您不能使用夹具作为参数值 - 只需使用函数即可。 Fixtures 必须用作测试参数,就像您的
test_simple示例中一样。 -
感谢@MrBeanBremen!我注意到,正如您提到的,fixture 不适用于参数化,但奇怪的是函数也不起作用。如果我只是启动我想在体外使用的对象一个函数/夹具,它确实有效,如下所示:
object1 = My_class("atr1", "atr2"),但如果它是由函数返回的,则不会 -
如果函数在加载时拥有所有需要的信息(而不是方法,因为它们在加载时未知),则它们应该可以工作。
-
你是对的!这是我的错,我没有正确命名我的函数。
-
对不起@MrBeanBremen,我是菜鸟,我想将您的答案标记为解决方案,但“答案旁边的标记”根本没有让我切换它。
标签: python pytest parametrized-testing