PyUnit的tearDown和setUp与__init__和__del__的区别

26 投票
1 回答
7808 浏览
提问于 2025-04-15 19:47

在使用pyUnit测试框架时,使用tearDown和setUp跟使用__init____del__之间有什么区别吗?如果有,具体是什么?哪种方法更好用呢?

1 个回答

39

setUp 是在每个测试之前调用的,而 tearDown 是在每个测试之后调用的。

__init__ 是在创建这个类的时候调用一次——但是因为每个测试方法都会创建一个新的 TestCase 实例,所以 __init__ 也会在每个测试时调用一次。

通常在写单元测试的时候,你不需要定义 __init____del__,不过你可以用 __init__ 来定义一些多个测试会用到的常量。


这段代码展示了方法调用的顺序:

import unittest
import sys

class TestTest(unittest.TestCase):

    def __init__(self, methodName='runTest'):
        # A new TestTest instance is created for each test method
        # Thus, __init__ is called once for each test method
        super(TestTest, self).__init__(methodName)
        print('__init__')

    def setUp(self):
        #
        # setUp is called once before each test
        #
        print('setUp')

    def tearDown(self):
        #
        # tearDown is called once after each test
        #
        print('tearDown')

    def test_A(self):
        print('test_A')

    def test_B(self):
        print('test_B')

    def test_C(self):
        print('test_C')



if __name__ == '__main__':
    sys.argv.insert(1, '--verbose')
    unittest.main(argv=sys.argv)

打印

__init__
__init__
__init__
test_A (__main__.TestTest) ... setUp
test_A
tearDown
ok
test_B (__main__.TestTest) ... setUp
test_B
tearDown
ok
test_C (__main__.TestTest) ... setUp
test_C
tearDown
ok

----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

撰写回答