1

运行下面的代码我得到

E TypeError: unbound method make_request() must be called with A instance as first argument (得到 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'
4

2 回答 2

0

@pytest.fixture() 创建夹具对象的实例

@pytest.fixture 直接访问fixture 类。

@pytest.fixture
def myfixture():
    """ """
    A('BigDave')
    return A

对比

@pytest.fixture
def myfixture():
    """ """

    return  A('BigDave')
于 2012-11-17T16:57:28.450 回答
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再次返回类对象。为了返回instanceA 类的一个,您将在其上调用您的方法,您需要返回A()或者只返回A('BigDave')您在那里使用的。

因此,现在您的方法将从test_validateA方法中获取一个类的实例,您正在调用该方法,从而传递as 第一个参数。Amyfixtureself

于 2012-11-17T17:02:26.717 回答