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

这是什么意思,如何满足?

最佳答案

您需要在@classmethod之前放置一个def setUpClass(cls)装饰器。

class TestDownload(unittest.TestCase):

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

setupClass docs are here classmethod docs here

发生的是,在suite.py line 163中,setUpClass作为简单函数(而不是绑定(bind)方法)在类(不是实例)上被调用。没有无提示地将参数传递给setUpClass,因此错误消息。

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

09-25 17:30