近期尝试了一下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>(\S\S+\/)+\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]作为測试例的名字被占用了。


[PYTHON]一个简单的单元測试框架的更多相关文章

  1. Google开源单元測试框架Google Test:VS2012 配置

    由题目可知,Google Test(简称gtest)是Google公布的一个开源C/C++測试框架,被应用于多个开源项目及Google内部项目中,包括Chrome浏览器.LLVM编译器架构.Proto ...

  2. hibernate 单元測试框架

    hibernate在写数据库配置文件时很的不确定,必须进行必要的測试保证数据库结构的正确性.所以能够应用junit进行測试. 使用junit很easy,eclipse仅仅须要右键项目新建一个junit ...

  3. C语言单元測试

    C语言单元測试 对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有 ...

  4. [iOS翻译]《iOS7 by Tutorials》在Xcode 5里使用单元測试(上)

    简单介绍: 单元測试是软件开发的一个重要方面.毕竟,单元測试能够帮你找到bug和崩溃原因,而程序崩溃是Apple在审查时拒绝app上架的首要原因. 单元測试不是万能的,但Apple把它作为开发工具包的 ...

  5. 【Android进阶】Junit单元測试环境搭建以及简单有用

    单元測试的目的 首先.Junit单元測试要实现的功能,就是用来測试写好的方法是否可以正确的运行,一般多用于对业务方法的測试. 单元測试的环境配置 1.在AndroidManifest清单文件的Appl ...

  6. 谈谈单元測试之(二):測试工具 JUnit 3

    前言 上一篇文章<为什么要进行烦人的单元測试?>讨论了一下现阶段软件开发中,程序猿们測试情况的现状.这篇文章中,我打算介绍一下单元測试的工具(插件).而且推荐大家以后在开发中,真正的用上单 ...

  7. (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试

    Android单元和instrumentation单元測试 Developing Android unit and instrumentation tests Android的单元測试是基于JUnit ...

  8. 使用maven运行单元測试总结

    maven本身没有单元測试框架,可是maven的default生命周期的test阶段绑定了maven-surefire-plugin插件,该插件能够调用Junit3.Junit4.TestNG等Jav ...

  9. python的unittest測试框架的扩展浅谈

    非常多时候測试框架须要依据測试数据来自己主动生成測试用例脚本,比方接口測试,通过不同參数构建组合去请求接口,然后验证返回结果.假设这样能通过配置excel数据来驱动測试.而不用去写一大堆的測试用例脚本 ...

随机推荐

  1. phpMyAdmin 高级功能尚未完全设置,部分功能未激活(转载)

    phpMyAdmin 高级功能尚未完全设置,部分功能未激活.请点击这里查看原因. 第一步: 使用Mysql管理员帐号通过phpmyadmin登陆,然后点击“导入”,然后点击“浏览”按钮,找到phpmy ...

  2. mysql_5.6.24_winx64 安装

    1.将zip压缩文件放在一个文件夹中 2.将路劲加入path环境变量 3.注册系统服务 在C:\windows下建立一个ini文件 1 2 3 4 5 6 7 8 9 10 11 12 [client ...

  3. POJ——T1125 Stockbroker Grapevine

    http://poj.org/problem?id=1125 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36045   ...

  4. 暑假NOIP期末考试【1】—— Phantom

    Phantom •题目名称: phantom •时间限制:1 秒 •空间限制:256 MiB 题目描写叙述 在一个无限大的棋盘上.排列着 n * n 枚棋子,形成一个 n 行 n 列的方阵.棋子能够横 ...

  5. MySQL事件调度器Event Scheduler

    我们都知道windows的计划任务和linux的crontab都是用来实现一些周期性的任务和固定时间须要运行的任务. 在mysql5.1之前我们完毕数据库的周期性操作都必须借助这些操作系统实现. 在m ...

  6. bzoj2463: [中山市选2009]谁能赢呢?(博弈论)

    2463: [中山市选2009]谁能赢呢? 题目:传送门 题解: 水体! n为偶数的话必能被1*2的矩形覆盖,那么因为一开始在左上角,所以先手一定可以先组成一个矩形,那么先手肯定必胜! n为奇数和上面 ...

  7. 指向类成员函数的函数指针及#define typedef 实现类成员函数的类型转换

    #include <iostream> using namespace std; class Test { public : void print() { cout << &q ...

  8. xBIM 基础09 WeXplorer 基本应用

    系列目录    [已更新最新开发文章,点击查看详细]  在本教程中,将学习如何创建最基本和最直接的查看器. 除了展示建筑模型外,不做其他任何操作.它将只使用内置导航,但是不会对按钮做出事件响应. &l ...

  9. BZOJ 3175 最大独立集

    思路: 最大独立集嘛 用nlogn的Dinic做 //By SiriusRen #include <queue> #include <cstdio> #include < ...

  10. jqGrid多级表格的实现

    原博主链接:http://blog.csdn.net/dreamstar613/article/details/54616503 jqGrid多级表格(可N级) 主要用的方法: subGridRowE ...