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
。也许您可以扩展您的示例以添加此功能?谢谢