• [PYTHON]一个简单的单元測试框架


    近期尝试了一下TDD(測试驱动)的模式。感觉效果不错。在此总结一下,同学们假设有更好的办法,一定要告诉我:)


    1. 每一个功能模块(文件),配一个单元測试模块。

    以手头这个项目为样例:有LogCat.py, LogModel.py, SceneBuilder.py 三个模块,那么就对应的新建LogCatTest.py, LogModelTest,SceneBuilderTest.py三个文件


    2. 每一个函数都对应写一个单元測试例。

    比方:在LogCat.py里有三个函数:

    def parseDate(l):
        p = "(?P<date>[0-9]+-[0-9]+) "
        match = re.search(p, l)
        s = ''
        if( match is not None):
            s = match.group('date')
        return s

    def parsePath(l):
        p = " (?P<path>(SS+/)+S+)"
        match = re.search(p, l)
        path = ''
        if( match is not None):
            path = match.group('path')
            if path.startswith("assets") is False:
                path = "assets/" + path
        return path


    def parseTime(l):
        p = " (?

    P<time>[0-9]+:[0-9]+:[0-9]+.[0-9]+) "
        match = re.search(p, l)
        t = None
        if( match is not None):
            s = match.group('time')
            t = datetime.datetime.strptime(s, '%H:%M:%S.%f')
        return t

    这几个函数是通过正則表達式解析一行日志中对应变量的。

    在LogCatTest.py里。写上对应的測试例:

    #LogCatTest.py
    from LogCat import *

    logs = []
    logs.append( '09-01 14:36:10.139 E/cocos2d-x debug info(23244): File loaded(4157 bytes): assets/UI/alpha/HVGA/card/card_turn_2.pvr.ccz')
    logs.append( '09-04 15:41:26.895 D/Cocos2d-x debug(16852): File loaded: assets/lang/data/video.txt.dream')
    logs.append( '09-04 15:41:26.895 D/Cocos2d-x debug(16852): File loaded: lang/data/video.start.mp3')
    logs.append( '09-04 15:41:26.895 D/Cocos2d-x debug(16852): File loaded: assets/version.txt')


    def unit_test_parseDate():    
        for l in logs:
            print parseDate(l)

    def unit_test_parseTime():
        for l in logs:
            print parseTime(l)

    def unit_test_parsePath():
        for l in logs:
            print parsePath(l)

    当然,这三个測试例測试的功能类似。能够整成一个。在这里仅仅是举个样例。


    3. 在測试模块中,加入main函数, 其功能是通过命令行參数动态载入測试例:

    #LogCatTest.py
    import traceback
    def main():
    func = sys.argv[1]
    unittest = "unit_test_" + func
    globals()[unittest]()


    if __name__ == "__main__":
        try:
            main()
        except Exception as e:
            traceback.print_exc()
            sys.exit(1)

    3. 在命令行执行:

    python LogCatTest.py parsePath,就能够执行对应的測试例了。


    这里要注意一个问题。 假设測试例也要从命令行读取參数,须要从sys.argv[2]開始,由于sys.argv[1]作为測试例的名字被占用了。



  • 相关阅读:
    什么是内部类
    "=="和equals方法究竟有什么区别?
    SWFUpload乱码问题的解决
    xStream转换XML、JSON
    Java文件下载
    笔记摘录
    Javascript 函数传参问题
    JQUERY伸缩导航
    ruby关于flip-flop理解上一个注意点
    ruby 使用Struct场景
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6932674.html
Copyright © 2020-2023  润新知