1

以下のコードを実行すると、

E TypeError:バインドされていないメソッドmake_request()は、最初の引数としてAインスタンスを使用して呼び出す必要があります(代わりに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は、フィクスチャクラスに直接アクセスします。

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

vs

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

    return  A('BigDave')
于 2012-11-17T16:57:28.450 に答える
0

最後の2つの方法を次のように置き換えてみてください。

@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クラスのインスタンスを取得し、最初の引数としてasを渡します。Amyfixtureself

于 2012-11-17T17:02:26.717 に答える