zoukankan      html  css  js  c++  java
  • [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]作为測试例的名字被占用了。



  • 相关阅读:
    OSCP Learning Notes Buffer Overflows(3)
    OSCP Learning Notes Buffer Overflows(5)
    OSCP Learning Notes Exploit(3)
    OSCP Learning Notes Exploit(4)
    OSCP Learning Notes Exploit(1)
    OSCP Learning Notes Netcat
    OSCP Learning Notes Buffer Overflows(4)
    OSCP Learning Notes Buffer Overflows(1)
    OSCP Learning Notes Exploit(2)
    C++格式化输出 Learner
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6932674.html
Copyright © 2011-2022 走看看