unittest.main()执行之后...

unittest.main()执行之后来到
unittest.main.TestProgram类的__init__方法,
__init__方法中的self.parseArgs(argv)有方法self.createTests()
createTests方法中:
self.test = self.testLoader.loadTestsFromModule(self.module)

loadTestsFromModule方法中:
for name in dir(module):
obj = getattr(module, name)
if isinstance(obj, type) and issubclass(obj, case.TestCase):
tests.append(self.loadTestsFromTestCase(obj))

def loadTestsFromTestCase(self, testCaseClass):
"""Return a suite of all test cases contained in testCaseClass"""
if issubclass(testCaseClass, suite.TestSuite):
raise TypeError("Test cases should not be derived from "
"TestSuite. Maybe you meant to derive from "
"TestCase?")
testCaseNames = self.getTestCaseNames(testCaseClass)
if not testCaseNames and hasattr(testCaseClass, 'runTest'):
testCaseNames = ['runTest']
loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames))
return loaded_suite

testCaseClass是module中定义的类,testCaseNames是类中以test开头的方法名的集合,如
["test_search_0","test_search_1"],调用map(testCaseClass, testCaseNames)后,将访问
testCaseClass即class TestBaiDu(unittest.TestCase)类的__init__方法,可查询map方法的
执行流程.访问父类unittest.TestCase的__init__方法,返回一个unittest.TestCase类的实例,
该实例中的一个变量self._testMethodName等于传入的testCaseName值,如第一次即"test_search_0".
返回的loaded_suite被append到loadTestsFromModule方法中的tests列表中

继续执行loadTestsFromModule方法中的
tests = self.suiteClass(tests)使tests成为一个TestSuite对象返回tests赋值给self.test-->
C:\Python36\Lib\unittest\main.py第144行,createTests结束,parseArgs方法结束.

开始执行self.runTests()
走到runTests方法的255行self.result = testRunner.run(self.test)

经过一系列调用最终走进unittest.case.TestCase的run方法,
第576行testMethod = getattr(self, self._testMethodName)经过self中保存的_testMethodName变量
得到测试方法testMethod
第597行self.setUp()
第601行testMethod()
第604行self.tearDown()

 

也可参看:https://blog.csdn.net/nitibu/article/details/48161339

posted @ 2018-04-27 15:34  jec1999  阅读(834)  评论(0)    收藏  举报