[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]作为测试例的名字被占用了。

时间: 2024-10-08 08:35:03

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

Python必会的单元测试框架 —— unittest

用Python搭建自动化测试框架,我们需要组织用例以及测试执行,这里博主推荐Python的标准库--unittest. unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那你用unittest来应该是很轻松的,它们的工作方式都差不多. unittest核心工作原理 unittest中最核心的四个概念是:test case, test suite, test runner, test fixture. 下面我们分别来解释这四个概念的意思,先来看一张unittest的静态

一个简单的web框架实现

一个简单的web框架实现 #!/usr/bin/env python # -- coding: utf-8 -- __author__ = 'EchoRep' from wsgiref.simple_server import make_server def index(): # data = open('html/index.html').read() return data def echo(): # data = open('html/echo.html').read() return d

自己实现的一个简单的EF框架(反射实现)

我实现了一个简单的EF框架,主要用于操纵数据库.实现了对数据库的基本操纵--CRUD 这是项目结构 这是一个 core 下的 DLL 写了一个数据库工厂,用于执行sql语句.调用sql语句工厂 写了一个sql语句工厂,用于生成sql语句.调用类型工厂 写了一个类型工厂,用于获取所需的类型,识别特性等. appsettings.json是配置文件 最后一个是使用说明 我实现过程的首先从底层开始. 首先写的是类型工厂 结构 BaseTypeHelper.cs 是基础的类型帮助类 TypeHelper

使用idea搭建一个简单的SSM框架:(3)配置spring+mybatis

在此之前请先查看: 使用idea搭建一个简单的SSM框架:(1)使用idea创建maven项目 使用idea搭建一个简单的SSM框架:(2)配置springMVC 1 配置spring和mybatis整合文件 spring和mybatis整合分为三个步骤:(1)配置数据库,(2)配置SqlSessionFactoryBean (来自mybatis-spring),(3)配置MapperScannerConfigurer,该配置就我们通过接口定义的方法,就是mybatis的xml对应的namesp

java创建一个简单的小框架frame

import java.awt.*; import javax.swing.*; public class SimpleFrameTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable(){ // 开一个线程 public void run() { SimpleFrame frame = new SimpleFrame(); frame.setTitle("记事本"); //

[记录]python的简单协程框架(回调+时间循环+select)

# -*- coding: utf-8 -*- # @Time : 2018/12/15 18:55 # @File : coroutine.py #一个简单的 Coroutine 框架 import socket # on top of TCP import time from selectors import DefaultSelector, EVENT_WRITE, EVENT_READ # select: System Call -----> watch the readiness of

Python学习 - 编写一个简单的web框架(二)

在上一篇日志中已经讨论和实现了根据url执行相应应用,在我阅读了bottle.py官方文档后,按照bottle的设计重写一遍,主要借鉴大牛们的设计思想. 一个bottle.py的简单实例 来看看bottle是如何使用的,代码来自http://www.bottlepy.org/docs/0.12/index.html: from bottle import route, run, template @route('/hello/<name>') def index(name): return t

python 一个简单的爬虫(1)

1.一个简单的爬虫:爬取豆瓣的热门电影的信息 技能:获取网页源码,正则表达式,函数调用,全局变量的定义 1 #! /usr/bin/env python 2 # -*- coding=utf-8 -*- 3 import requests 4 import json 5 import re 6 import sys 7 reload(sys) 8 sys.setdefaultencoding("utf-8") 9 classinfo = [] 10 f = open('info.txt

AsMVC:一个简单的MVC框架的Java实现

当初看了<从零开始写一个Java Web框架>,也跟着写了一遍,但当时学艺不精,真正进脑子里的并不是很多,作者将依赖注入框架和MVC框架写在一起也给我造成了不小的困扰.最近刚好看了一遍springMVC的官方文档,对过去一段时间的使用做了一下总结,总结了一些MVC的使用需求,打算自己开坑写一个MVC框架,虽然是重复造轮子的过程,但也是学习提高的过程. 1.我们可能需要一个什么样的MVC框架 (1)用户一:我讨厌配置文件,最好能用注解的全用注解注解,能扫描直接扫描 (2)用户二:最好我导入一个j