setUpClass()缺少一个必需的位置参数:'cls'。

40

我第一次尝试使用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'

这是什么意思,怎样满足它呢?


4
你是否在 def setUpClass(cls): 前面加了 @classmethod 装饰器? - Jacques Gaudin
2个回答

67

你需要在 def setUpClass(cls) 前面加上 @classmethod 装饰器。

class TestDownload(unittest.TestCase):

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

setupClass 文档在这里classmethod 文档在这里

发生的情况是,在 suite.py 的第 163 行setUpClass 在类上 (而不是实例) 被调用作为一个简单的函数(而不是绑定方法)。没有参数默默地传递给 setUpClass,因此出现了错误消息。

通过添加 @classmethod 装饰器,你在表示当调用 TestDownload.setupClass() 时,第一个参数是类 TestDownload 本身。


0
在setUp和tearDown之前添加@classmethod可以解决这个问题。@classmethod绑定到类。
class LoginTest(unittest.TestCase):

   @classmethod
   def setUpClass(cls):

   **Your code**

   @classmethod
   def tearDownClass(self):

1
这如何补充现有的答案? - Jacques Gaudin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接