1

私はLPTHWを介して作業している初心者ですこれはそれへのリンクです。ex48では、テストされる対応するmy_codeを書き込むことになっているユニットテストとして多くのコードが与えられます(nosetestsを使用して、この文で多くのテストを申し訳ありません)。

これはmy_codeです:

class lexicon(object):

    def __init__(self):
    #some initial stuff.

    def scan(self,stuff):
    #some cool code.

そしてこれはtest.pyファイルです

from nose.tools import*
from Ex48.code import lexicon

def test_directions():    

    assert_equal(lexicon.scan("north"), [('direction', 'north')])
    ...#Unimportant details the above is enough.

ただし、nosetestsを実行すると、次のエラーが発生します。

Traceback (most recent call last):
    File "c:\python31\lib\site-packages\nose'case.py", line 197, i runTest
    ... line x, in test_directions
    assert_equal(lexicon.scan("north"), [('direction', 'north')])
TypeError: scan() takes exactly 2 positional arguments (1 given)

これらの2つの引数の1つは自己のものであり、私はそれを与えるべきではないと思ったので、これは奇妙です。

この問題を解決するために私は試しました:

@staticmethod
def scan(self,stuff):

しかし、これは私に同じtypeErrorを与えました

次に試しました:

assert_equal(lexicon.__init__(self).scan(...)

しかし、これも機能しませんでした(.init(self)は、メインではなく、レキシコンのみ以外のクラスで使用する必要があると思います)。

私は最終的に次のように解決しました:

lexicon1=lexicon()
def test_directions():    
    assert_equal(lexicon1.scan("north"), [('direction', 'north')])

しかし、これは演習が行われることになっている方法ではありません!

PS:トレースバックは必要ないかもしれないので(そして非常に遅くなっているので)、トレースバック全体を含めませんでした。コードの一部を含めませんでしたbc正常に動作し、エラーの原因ではないと確信しています。

4

1 に答える 1

2

あなたがそれをしている方法(インスタンスを作成してからそのメソッドを使用する-lexicon1を使用した例)は良いと思いますよね?

あなたがそれを最初の方法でやりたいのなら、あなたは試しましたか?

@classmethod
def scan(self, stuff):

私も初心者です(演習49を終えたばかりです)ので、他の誰かがもっとよく答えることができるかもしれません。ただし、@classmethodデコレータが必要なことを実行するかどうかは不思議です。

于 2012-08-01T02:22:53.283 に答える