[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>(\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]一个简单的单元測试框架的更多相关文章
- Google开源单元測试框架Google Test:VS2012 配置
由题目可知,Google Test(简称gtest)是Google公布的一个开源C/C++測试框架,被应用于多个开源项目及Google内部项目中,包括Chrome浏览器.LLVM编译器架构.Proto ...
- hibernate 单元測试框架
hibernate在写数据库配置文件时很的不确定,必须进行必要的測试保证数据库结构的正确性.所以能够应用junit进行測试. 使用junit很easy,eclipse仅仅须要右键项目新建一个junit ...
- C语言单元測试
C语言单元測试 对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有 ...
- [iOS翻译]《iOS7 by Tutorials》在Xcode 5里使用单元測试(上)
简单介绍: 单元測试是软件开发的一个重要方面.毕竟,单元測试能够帮你找到bug和崩溃原因,而程序崩溃是Apple在审查时拒绝app上架的首要原因. 单元測试不是万能的,但Apple把它作为开发工具包的 ...
- 【Android进阶】Junit单元測试环境搭建以及简单有用
单元測试的目的 首先.Junit单元測试要实现的功能,就是用来測试写好的方法是否可以正确的运行,一般多用于对业务方法的測试. 单元測试的环境配置 1.在AndroidManifest清单文件的Appl ...
- 谈谈单元測试之(二):測试工具 JUnit 3
前言 上一篇文章<为什么要进行烦人的单元測试?>讨论了一下现阶段软件开发中,程序猿们測试情况的现状.这篇文章中,我打算介绍一下单元測试的工具(插件).而且推荐大家以后在开发中,真正的用上单 ...
- (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试
Android单元和instrumentation单元測试 Developing Android unit and instrumentation tests Android的单元測试是基于JUnit ...
- 使用maven运行单元測试总结
maven本身没有单元測试框架,可是maven的default生命周期的test阶段绑定了maven-surefire-plugin插件,该插件能够调用Junit3.Junit4.TestNG等Jav ...
- python的unittest測试框架的扩展浅谈
非常多时候測试框架须要依据測试数据来自己主动生成測试用例脚本,比方接口測试,通过不同參数构建组合去请求接口,然后验证返回结果.假设这样能通过配置excel数据来驱动測试.而不用去写一大堆的測试用例脚本 ...
随机推荐
- 2.安装Cython
许多科学的Python发行版,例如Anaconda,Enthought Canopy和Sage,捆绑Cython并且不需要设置. 与大多数Python软件不同,Cython需要在系统上存在C编译器.获 ...
- 通过CSS样式隐藏百度版权标志
在JSP中添加: //隐藏所有.anchorBL{ display:none; } //隐藏下方的保留百度地图图片 .BMap_cpyCtrl{ display:none; } 注:维护他人版权, ...
- Ubuntu 15.10 安装Qt5.5.1
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50300447 本人使用的ubuntu系 ...
- ASP.NET-datatable转换成list对象
#region 讲DataTable转换为List对象 /// <summary> /// 利用反射将DataTable转换为List<T>对象 /// </summar ...
- WinServer-IIS-MIME类型
自定义类型的处理流程 1.浏览器问服务器,这是什么类型的文件 2.服务器告诉浏览器这是什么类型的文件(如果不告诉,那么浏览器就会下载相应文件) 3.浏览器告诉windows注册表这是什么类型的文件 4 ...
- 洛谷 P2652 同花顺
P2652 同花顺 题目背景 所谓同花顺,就是指一些扑克牌,它们花色相同,并且数字连续. 题目描述 现在我手里有n张扑克牌,但它们可能并不能凑成同花顺.我现在想知道,最少更换其中的多少张牌,我能让这 ...
- POJ 1715
同样是确定某位上的数,当确定某一位后,其后面的排列数是确定的,所以可以用除法和取余数的方法来确定这一位的值 #include <iostream> #include <cstdio& ...
- Executors线程池关闭时间计算
Executors线程池关闭时间计算 学习了:http://blog.csdn.net/wo541075754/article/details/51564359 https://www.cnblogs ...
- JStorm之Topology调度
topology在服务端提交过程中,会经过一系列的验证和初始化:TP结构校验.创建本地文件夹并拷贝序列化文件jar包.生成znode用于存放TP和task等信息,最后一步才进行任务分配.例如以下图 ...
- org.hibernate.AssertionFailure: null id in com.you.model.User entry (don't flush the Session after a
1.错误描写叙述 org.hibernate.AssertionFailure: null id in com.you.model.User entry (don't flush the Sessio ...