为了工作方便,在上述基础上写了一个测试模块test,当创建好自己的模块后,有时候需要进行模块的单元测试,这时候只要导入test, 然后在Tested Module代码后面直接调用函数测试,属性值测试,就可以直接测试了,测试结果集成了TestCaseResult,会给出具体的测试报告,自己觉得很方便而已,呵呵,后面有时间还想扩展一下针对类的测试,在函数测试上引入多线程等等。主要应用了Python运行时脚本编译的特性,根据被测试模块的内容动态生成字符串代码对象,经编译后就可以在程序中动态生成类以供调用。
l Python Unit Testing Framework ---Unittest Model 学习
l Python 中的测试框架,也可称做PyUnit ,几乎就是JUnit的Python 版本。支持setup and shutdown code for tests, 独立测试,集成测试,我使用的是python 2.6 ,内置的测试模块名为unittest 。可以通过from unittest import * 方法导入需要的功能模块
l 继承python Unittest TestCase 类,测试方法必须以test开头命名,单元测试时可使用派生使初始化测试代码的重用。
l TestSuit,作为轻量级集成测试时使用。可以方便地添加基类型为Testcase的所有子类,统一测试。
l widgetTestSuite=unittest.TestSuite() widgetTestSuite.addTest(WidgetTestCase('testDefaultSize')) widgetTestSuite.addTest(WidgetTestCase('testResize'))
l 单元测试的使用---导入unittest模块 unittest.main() 在被测试单元中实现至少一个TestCase派生,或者从TestLoader加载,例:
l suite =unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions) unittest.TextTestRunner(verbosity=2).run(suite)
l 为了工作方便,在上述基础上写了一个测试模块test,当创建好自己的模块后,有时候需要进行模块的单元测试,这时候只要导入test, 然后在Tested Module代码后面直接调用函数测试,属性值测试,就可以直接测试了,测试结果集成了TestCaseResult,会给出具体的测试报告,自己觉得很方便而已,呵呵,后面有时间还想扩展一下针对类的测试,在函数测试上引入多线程等等。主要应用了Python运行时脚本编译的特性,根据被测试模块的内容动态生成字符串代码对象,经编译后就可以在程序中动态生成类以供调用。附test代码:

Code
'''
Created on 2009-7-18
@author: ysisl
This is a unit test framework module .
you can test your Module only by imported test.py
1. use addTestAttrs(attr_name,value) ,add the testing variable(attr_name) of your module (value is anticipant)
2. use adddTestMethods(func,args,result=None) ,add the testing Function of your module
(args must be tuple type,example:'args=(3,4)')
'''
from time import ctime
import unittest
__all__=['allTestAttrs','allTestMethods','startModuleTest']
_model_funcs=[]
_model_attrs=[]
def addTestAttrs(_attr_name,value):
_model_attrs.append((_attr_name,value))
def addTestMethods(func,args,result=None):
_model_funcs.append((func,args,result))
def makecode():
_head_code='''
class TestModule(unittest.TestCase):
def a(self):
print 'aaa'
'''
_loop_func=_loop_attr=''
for i,attr in enumerate(_model_attrs):
_attr,_attr_value=attr[0],attr[1]
if type(_attr)==str :
_attr=repr(_attr)
_attr_value=repr(_attr_value)
_loop_attr_code='''
def test_attr_%s(self):
self.assertEqual(%s,%s)
''' %(str(i+1),_attr ,_attr_value)
_loop_attr=_loop_attr+_loop_attr_code
for i,func in enumerate(_model_funcs):
_func_result=str(func[2])
if type(func[2])==str:
_func_result=repr(func[2])
_loop_func_code='''
def test_method_%s(self):
self.assertEqual(%s(*%s),%s)
''' %(func[0].__name__,'_model_funcs['+str(i)+'][0]',str(func[1]),_func_result)
_loop_func+=_loop_func_code
return _head_code+_loop_attr+_loop_func
def startModuleTest():
print ''.join(['*'*13,' '*2,'Model Unit Test at:',ctime(),' '*2,'*'*13,'\n'])
code= makecode()
exec code
suite = unittest.TestLoader().loadTestsFromTestCase(TestModule)
unittest.TextTestRunner(verbosity=2).run(suite)
if __name__ == '__main__':
addTestMethods(addTestAttrs, ('test','test'),None)
startModuleTest()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义