文章标题
来源:互联网 发布:sql语言设计登陆验证码 编辑:程序博客网 时间:2024/06/15 13:08
Python unittest 简明教程
为什么要写unittest
unittest(单元测试)是保证代码质量的重要手段之一。在项目开发新的feature(特性)时,经常需要对代码进行局部修改,单元测试的意义在于保证修改后的局部代码能够被测试覆盖,检验修改后的代码是否满足新feature的需求。尤其是对于不喜欢使用IDE的python程序员来说,单元测试能够有效杜绝局部代码的语法错误和逻辑错误,为后续整个项目的集成功能测试减轻负担。
python 单元测试框架unittest介绍
python自带的unittest模块提供了很简单易用的单元测试工具。它支持测试自动化,多个测试之间共享setup和shutdown代码,把多个测试合并执行等功能。
为了方便理解和实现这些功能,unittest支持了三个层次的概念:
测试用例
一个测试用例就是一个最小的测试单元。它用来检查被测试的单元,譬如函数或成员函数,对于特定输入的反应。unittest提供了一个基类TestCase用来构造新的测试用例。
固定设施
固定设施就是多个相关测试用例所共享的公共准备工作,譬如创建一个路径,链接数据库,或者类对象初始化等等。
测试用例集
测试用例集是把多个测试合并到一个集合中,便于一次执行全部测试用例,并且生成聚合的测试报告。
unittest.TestCase的基类提供setUp(),tearDown(),runTest()三个函数供子类覆盖实现,其中runTest()是执行测试的函数。
unittest框架使用
一个简单的unittest例子如下:
import unitestclass TestStringMethods(unittest.TestCase): def setUp(self): pass def test_upper(self): self.assertEqual('foo'.upper(), 'FOO') def test_isupper(self): self.assertTrue('FOO'.isupper()) self.assertTrue('Foo'.isupper()) def test_split(self): s = 'hello world' self.assertEqual(s.split(), ['hello', 'world']) def tearDown(self): passsuite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)unittest.TextTestRunner(verbosity=2).run(suite)
这个例子中测试用例TestStringMethods通过继承扩展unittest.TestCase来构造。
- TestStringMethods子类定义了三个独立的名字以test开头的子测试用例,这种命名惯例通知测试runner哪些成员函数代表实际的测试用例。每个测试用例的关键在于调用assertEqual()或者assertTrue()函数来检查返回结果与期望值是否一致。
- 可以覆盖unittest.TestCase的setUp()和tearDown()函数来定义为这三个测试用例所共享的固定设施,即在每次执行单个test_*前后分别执行。
- unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)的含义在于根据前述命名惯例,从TestStringMethods中找到3个测试用例函数,分别构造了3个TestStringMethods的子类并且用3个test_*函数的内容覆盖各自的runTest()函数。因此suite里包含3个测试用例,最后被unittest.TextTestRunner执行。
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- erlang趣事六erlangshell ssh登陆
- Android异步消息处理机制(一):简单使用
- Activity的启动模式
- Servlet过滤器Filter使用 .
- webservice小例子
- 文章标题
- 自考C++程序设计试题2010年1月
- BestCoder Round #74 (div.2) T3 Transform HDOJ 5637
- phpcmsV9后台审核内容增加删除修改内容选项!
- 查看apk签名信息方法
- uva108 - - Maximum Sum (最大连续子矩阵和)
- POJ 2528
- 什么是android Service?
- STL sort源码剖析