运行下面的代码我得到
E TypeError:必须使用A实例作为第一个参数调用未绑定方法make_request()(改为使用str实例)
我不想将make_request方法设置为静态,我想从对象的实例中调用它。
示例http://pytest.org/latest/fixture.html#fixture-function
# content of ./test_smtpsimple.py
import pytest
@pytest.fixture
def smtp():
import smtplib
return smtplib.SMTP("merlinux.eu")
def test_ehlo(smtp):
response, msg = smtp.ehlo()
assert response == 250
assert "merlinux" in msg
assert 0 # for demo purposes
我的代码
""" """
import pytest
class A(object):
""" """
def __init__(self, name ):
""" """
self._prop1 = [name]
@property
def prop1(self):
return self._prop1
@prop1.setter
def prop1(self, arguments):
self._prop1 = arguments
def make_request(self, sex):
return 'result'
def __call__(self):
return self
@pytest.fixture()
def myfixture():
""" """
A('BigDave')
return A
def test_validateA(myfixture):
result = myfixture.make_request('male')
assert result =='result'
答案 0 :(得分:0)
@ pytest.fixture()创建fixture对象的实例
@ pytest.fixture直接访问fixture类。
@pytest.fixture
def myfixture():
""" """
A('BigDave')
return A
VS
@pytest.fixture
def myfixture():
""" """
return A('BigDave')
答案 1 :(得分:0)
您可以尝试将最后两种方法替换为: -
@pytest.fixture()
def myfixture():
""" """
return A('BigDave')
def test_validateA(myfixture):
result = myfixture().make_request('male')
assert result =='result'
myfixture
是函数对象。要调用该功能,您需要一个括号。所以,myfixture()
。
现在在myfixture()
方法中,return A
再次返回类对象。要返回您将在其上调用方法的A级instance
,您需要返回A()
或只返回您在那里使用的A('BigDave')
。
因此,现在您的test_validateA
方法将从A
方法获取类myfixture
的实例,您正在调用该方法,因此首先传递self
参数。