PyUnit的tearDown和setUp与__init__和__del__有什么区别?

25

使用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

谢谢您的回答,它对我这个Python新手有很大帮助。我还发现了一种替代__init____del__的方法:使用setUpClasstearDownClass函数。这些必须是类方法,换句话说,在它们之前必须加上@classmethod文档链接 - sunyata
1
根据此链接(https://docs.python.org/3.7/library/unittest.html#organizing-test-code),“~TestCase.setUp,~TestCase.tearDown和~TestCase.__init__将在每个测试中调用一次。”。 - ismailarilik
@ismailarilik:非常感谢您的纠正! - unutbu

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