setUpClass() missing 1 required positional argument: 'cls'

Question:

I tried to use setUpClass() method for the first time in my life and wrote:

class TestDownload(unittest.TestCase):

    def setUpClass(cls):
        config.fs = True

and got:

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'

What does it mean and how to satisfy it?

Asked By: Dims

||

Answers:

You need to put a @classmethod decorator before def setUpClass(cls).

class TestDownload(unittest.TestCase):

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

The setupClass docs are here and classmethod docs here.

What happens is that in suite.py line 163 the setUpClass gets called on the class (not an instance) as a simple function (as opposed to a bound method). There is no argument passed silently to setUpClass, hence the error message.

By adding the @classmethod decorator, you are saying that when TestDownload.setupClass() is called, the first argument is the class TestDownload itself.

Answered By: Jacques Gaudin

Adding @classmethod before setUp and tearDown will resolve the issue. @classmethod is bound to the class.

class LoginTest(unittest.TestCase):

   @classmethod
   def setUpClass(cls):

   **Your code**

   @classmethod
   def tearDownClass(self):
Answered By: Atul
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.