Python Pytest-如何将参数传递给setup_类?

Python Pytest-如何将参数传递给setup_类?,python,pytest,Python,Pytest,我有一些代码如下所示。 运行时,我遇到一个参数太少的错误。 我没有显式调用setup\u class,因此不确定如何向其传递任何参数。 我尝试用@classmethod装饰该方法,但仍然看到相同的错误 我看到的错误是-E TypeError:setup\u class()正好接受2个参数(给定1个) 需要注意的一点是,如果我没有向类传递任何参数,并且只传递cls,那么我就看不到错误 非常感谢您的帮助 在发布之前,我确实复习了这些问题。我不理解这些问题的解决方案,也不理解它们是如何工作的 clas

我有一些代码如下所示。 运行时,我遇到一个参数太少的
错误。
我没有显式调用
setup\u class
,因此不确定如何向其传递任何参数。 我尝试用
@classmethod
装饰该方法,但仍然看到相同的错误

我看到的错误是-
E TypeError:setup\u class()正好接受2个参数(给定1个)

需要注意的一点是,如果我没有向类传递任何参数,并且只传递
cls
,那么我就看不到错误

非常感谢您的帮助

在发布之前,我确实复习了这些问题。我不理解这些问题的解决方案,也不理解它们是如何工作的

class A_Helper:
    def __init__(self, fixture):
        print "In class A_Helper"

    def some_method_in_a_helper(self):
        print "foo"

class Test_class:
    def setup_class(cls, fixture):
        print "!!! In setup class !!!"
        cls.a_helper = A_Helper(fixture)

    def test_some_method(self):
        self.a_helper.some_method_in_a_helper()
        assert 0 == 0

由于您将其与pytest一起使用,因此它将仅使用一个参数和一个参数调用
setup\u class
,看起来您无法在不更改方式的情况下更改它

您只需按照指定的定义
setup\u class
函数,然后在该方法中使用该函数中所需的自定义参数设置类,如下所示

class Test_class:
    @classmethod
    def setup_class(cls):
        print "!!! In setup class !!!"
        arg = '' # your parameter here
        cls.a_helper = A_Helper(arg)

    def test_some_method(self):
        self.a_helper.some_method_in_a_helper()
        assert 0 == 0

出现此错误是因为您试图混合py.test支持的两种独立测试样式:经典单元测试和pytest的fixture

我建议不要混用它们,而是简单地定义一个类范围的装置,如下所示:

import pytest

class A_Helper:
    def __init__(self, fixture):
        print "In class A_Helper"

    def some_method_in_a_helper(self):
        print "foo"

@pytest.fixture(scope='class')
def a_helper(fixture):
    return A_Helper(fixture)

class Test_class:
    def test_some_method(self, a_helper):
        a_helper.some_method_in_a_helper()
        assert 0 == 0

@metatoaster我不必实例化
Test\u类
。我希望使用我提供的
arg
实例化
A_Helper
。然后使用这个对象(
a\u helper
),我希望调用
a\u helper
中的方法。我在概念上遗漏了什么吗?只要我不向
setup\u类
提供arg,相同的代码就可以工作,而无需实例化任何内容。正如@metatoaster所指出的,这是不可能的。但是定义一个辅助设备(使用
scope='class'
)并将其传递给
测试某种方法是否会更简单?通常,
setup\u类
处理添加到py.test中,只是为了使其与经典的单元式测试兼容。我建议不要将这两种风格(即古典风格与py.test fixture风格)混为一谈。我编辑了问题,并将
arg
替换为
fixture
。我的意图是-从测试方法来看,我希望将一个或多个fixture传递给helper方法,并使用helper方法中的
fixture
执行一些操作。如果无法传递第二个参数,那么我不确定如何传递fixture,即使在方法体中也是如此。文档中的一条注释非常有趣,特别是在最后的备注部分:现在xunit风格的函数与fixture机制集成,并遵守调用中涉及的fixture的适当范围规则。我想知道这是否打破了@freakish在另一个答案中提到的“混合”技术,该技术在不遵守范围规则的情况下可能曾经起作用。嗨,我希望使用您的方法,但除了在测试函数中使用夹具外,还将其传递给prolog函数,如
setup\u class
setup\u method
。也许您可以扩展您的示例以添加此功能?谢谢