三言两语聊Python模块–单元测试模块unittest
实际上unittest模块才是真正意义上的用于测试的模块,功能强大的单元测试模块。
继续使用前面的例子:
# splitter.py def split(line, types = None , delimiter = None ): """Splits a line of test and optionally performs type conversion. For example: >>> split('GOOD 100 490.50') ['GOOD', '100', '490.50'] >>> split('GOOD 100 490.50', [str, int, float]) ['GOOD', 100, 490.50] >>> By default, splitting is perfomed on whitespace, but a different delimiter can be selected with the delimiter keyword argument: >>> split('GOOD, 100, 490.50', delimiter=',') ['GOOOD', '100', '490.50'] >>> """ fields = line.split(delimiter) if types: fields = [ty(val) for ty, val in zip (types, fields)] return fields if __name__ = = '__main__' : # test myself import doctest doctest.testmod() |
编写测试该函数的脚本:
# testsplitter.py import splitter import unittest # unit test class TestSplitFunction(unittest.TestCase): def setUp( self ): pass def tearDown( self ): pass def testsimplestring( self ): r = splitter.split( 'GOOD 100 490.50' ) self .assertEqual(r, [ 'GOOD' , '100' , '490.50' ]) def testypeconvert( self ): r = splitter.split( 'GOOD 100 490.50' , [ str , int , float ]) self .assertEqual(r, [ 'GOOD' , 100 , 490.50 ]) def testdelimiter( self ): r = splitter.split( 'GOOD, 100, 490.50' , delimiter = ',' ) self .assertEqual(r, [ 'GOOD' , '100' , '490.50' ]) # Run unit test if __name__ = = '__main__' : unittest.main() |
运行结果:
>>> F.. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = FAIL: testdelimiter (__main__.TestSplitFunction) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Traceback (most recent call last): File "C:\Users\Administrator\Desktop\Python Scripts\testsplitter - 副本.py" , line 19 , in testdelimiter self .assertEqual(r, [ 'GOOD' , '100' , '490.50' ]) AssertionError: Lists differ: [ 'GOOD' , ' 100' , ' 490.50' ] ! = [ 'GOOD' , '100' , '490.50' ] First differing element 1 : 100 100 - [ 'GOOD' , ' 100' , ' 490.50' ] ? - - + [ 'GOOD' , '100' , '490.50' ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ran 3 tests in 0.059s FAILED (failures = 1 ) Traceback (most recent call last): File "C:\Users\Administrator\Desktop\Python Scripts\testsplitter - 副本.py" , line 23 , in <module> unittest.main() File "D:\Python33\lib\unittest\main.py" , line 125 , in __init__ self .runTests() File "D:\Python33\lib\unittest\main.py" , line 267 , in runTests sys.exit( not self .result.wasSuccessful()) SystemExit: True |
unittest里面unitest.TestCase实例t最常用的方法:
t.setUp() - 执行测试前的设置步骤
t.tearDown() - 测试完,执行清除操作
t.assertEqual(x, y [,msg]) - 执行断言
还有其他各种断言。
伪python爱好者,正宗测试实践者。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步