web-dev-qa-db-ja.com

setUpClass()に必要な位置引数が1つありません: 'cls'

私は自分の人生で初めてsetUpClass()メソッドを使用しようとして、次のように書きました:

class TestDownload(unittest.TestCase):

    def setUpClass(cls):
        config.fs = True

そして得た:

Ran 0 tests in 0.004s

FAILED (errors=1)

Failure
Traceback (most recent call last):
  File "/opt/anaconda3/lib/python3.5/unittest/suite.py", line 163, in _handleClassSetUp
    setUpClass()
TypeError: setUpClass() missing 1 required positional argument: 'cls'

それは何を意味し、どのようにそれを満足させるのですか?

17
Dims

def setUpClass(cls)の前に_@classmethod_デコレータを置く必要があります。

_class TestDownload(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        config.fs = True
_

setupClass docs are here および classmethod docs here

suite.py 163行目 では、(バインドされたメソッドではなく)setUpClassがクラスでは(インスタンスではなく)単純な関数として呼び出されます。 setUpClassに暗黙的に渡される引数がないため、エラーメッセージが表示されます。

_@classmethod_デコレータを追加することで、TestDownload.setupClass()が呼び出されたときに、最初の引数がクラスTestDownload自体であることを示しています。

26
Jacques Gaudin

SetUpおよびtearDownの前に@classmethodを追加すると、問題が解決します。 @classmethodはクラスにバインドされます。

class LoginTest(unittest.TestCase):

   @classmethod
   def setUpClass(cls):

   **Your code**

   @classmethod
   def tearDownClass(self):
1
Atul