如果想要自定义跑哪些case或者同时执行多个文件中的case,可以再写一个run.py文件,将所要执行的测试类引入,可引入多个,代码如下:
  import unittest
  from test_sort import TestSort
  if __name__=='__main__':
  suite=unittest.TestSuite()
  #suite.addTest(TestSort('test_quick_sort_1')) #此时只运行est_quick_sort_1这条case
  #suite.addTest(unittest.TestLoader().loadTestsFromTestCase(TestSort)) #这句等价于下面那句
  suite.addTest(unittest.makeSuite(TestSort)) #执行TestSort类中的所有case
  runner=unittest.TextTestRunner(verbosity=2) #等于2打印详细的执行信息
  runner.run(suite)
  在进行数据准备和数据清理时可以使用setUp和tearDown(每条case执行前后时执行),setUpClass和tearDownClass(每个类执行前后时执行)。比如写一个数据库增删改查的类,每个case都需要用到数据库连接,此时可以在case开始跑之前在setUpClass中建立一个连接,在tearDownClass中写数据库关闭;又如case执行时可能依赖一些数据但是数据库中没有,此时可以在setUp中写一些插入数据的准备,在执行后在tearDown中做数据清理,以免影响其他数据。
  用法举例,将test_sort.py改成如下代码示例:
import unittest
from sort import Sort
class TestSort(unittest.TestCase):
@classmethod
def setUpClass(cls):
print 'this is setupclass'
def setUp(self):
print 'this is setup'
def test_bubble_sort_1(self):
arr=[]
self.assertEquals([],Sort.bubble_sort(arr))
def test_quick_sort_4(self):
arr=(15,12,36,22,1,7,18)
self.assertEquals(sorted(arr),Sort.quick_sort(arr))
def tearDown(self):
print 'this is teardown'
@classmethod
def tearDownClass(cls):
print 'this is teardownclass'
执行run.py效果如下:
>>>
this is setupclass
test_bubble_sort_1 (test_sort.TestSort) ... this is setup
this is teardown
ok
test_quick_sort_4 (test_sort.TestSort) ... this is setup
this is teardown
ok
this is teardownclass
----------------------------------------------------------------------
Ran 2 tests in 0.043s
OK
>>>