PyUnit的tearDown和setUp与__init__和__del__的区别
在使用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