如果setUpClass抛出异常,如何使python unittest失败

sys*_*ser 12 python unit-testing

我在使用python setUpClass时遇到了一些麻烦.

例如,考虑以下情况

class MyTest(unittest.case.TestCase):

    @classmethod
    def setUpClass(cls):
        print "Test setup"
        try:
            1/0
        except:
            raise

    @classmethod
    def tearDownClass(cls):
        print "Test teardown"
Run Code Online (Sandbox Code Playgroud)

几个问题

  1. 上面的代码是处理测试setUpClass异常的正确方法(通过提高它以便python unittest可以处理它),有fail(),skip()方法,但那些只能由测试实例使用而不是测试类.

  2. 当存在setUpClass异常时,我们如何确保tearDownClass运行(如果我们手动调用它,则unittest不运行它).

Y__*_*Y__ 5

你可以tearDownClass在Jeff指出时调用异常,但你也可以实现该__del__(cls)方法:

import unittest

class MyTest(unittest.case.TestCase):

    @classmethod
    def setUpClass(cls):
        print "Test setup"
        try:
            1/0
        except:
            raise

    @classmethod
    def __del__(cls):
        print "Test teardown"

    def test_hello(cls):
        print "Hello"

if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

将有以下输出:

Test setup
E
======================================================================
ERROR: setUpClass (__main__.MyTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "my_test.py", line 8, in setUpClass
    1/0
ZeroDivisionError: integer division or modulo by zero

----------------------------------------------------------------------
Ran 0 tests in 0.000s

FAILED (errors=1)
Test teardown
Run Code Online (Sandbox Code Playgroud)

注意:您应该知道__del__在程序执行结束时将调用该方法,如果您有多个测试类,这可能不是您想要的.

希望能帮助到你