工作后忽然发现,对于一个开发者,自己的代码一定要做好充分的单元测试才能提交代码。

  1. 单元测试可以有效地测试某个程序模块的行为,是未来重构代码的信心保证。

  2. 单元测试的测试用例要覆盖常用的输入组合、边界条件和异常。

  3. 单元测试代码要非常简单,如果测试代码太复杂,那么测试代码本身就可能有bug。

  4. 单元测试通过了并不意味着程序就没有bug了,但是不通过程序肯定有bug。

其他的不多说,直接看一个测试:

我们来编写一个Dict类,这个类的行为和dict一致,但是可以通过属性来访问,用起来就像下面这样:

>>> d = Dict(a=1, b=2)
>>> d['a']
1
>>> d.a
1

mydict.py的实现代码和测试代码如下:

class Dict(dict):def __init__(self, **kw):super(Dict, self).__init__(**kw)def __getattr__(self, key):try:return self[key]except KeyError:raise AttributeError(r"'Dict' object has no attribute '%s' " % key)def __setattr__(self, key, value):self[key] = valueif __name__ == "__main__":import unittestclass TestDict(unittest.TestCase):"""Unit test case for class Dict"""def setUp(self):print 'setUp...'def tearDown(self):print 'tearDown...'def test_init(self):d = Dict(a=1, b='test')self.assertEquals(d.a, 1)self.assertEquals(d.b, 'test')self.assertTrue(isinstance(d, dict))def test_key(self):d = Dict()d['key'] = 'value'self.assertEquals(d.key, 'value')def test_attr(self):d = Dict()d.key = 'value'self.assertTrue('key' in d)self.assertEquals(d['key'], 'value')def test_keyerror(self):d = Dict()with self.assertRaises(KeyError):value = d['empty']def test_attrerror(self):d = Dict()with self.assertRaises(AttributeError):value = d.emptyunittest.main()

有的一些地方,把测试用例代码和被测试的代码分开写,个人觉得不好管理。

  • 编写单元测试时,我们需要编写一个测试类,从unittest.TestCase继承。

  • 以test开头的方法就是测试方法,不以test开头的方法不被认为是测试方法,测试的时候不会被执行。

  • 对每一类测试都需要编写一个test_xxx()方法。由于unittest.TestCase提供了很多内置的条件判断,我们只需要调用这些方法就可以断言输出是否是我们所期望的。最常用的断言就是assertEquals()。

  • 另一种重要的断言就是期待抛出指定类型的Error,比如通过d[‘empty’]访问不存在的key时,断言会抛出KeyError。

通过在类最后调用unittest.main() 就可以执行测试用例代码。

可以在单元测试中编写两个特殊的setUp()和tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。

setUp()和tearDown()方法有什么用呢?设想你的测试需要启动一个数据库,这时,就可以在setUp()方法中连接数据库,在tearDown()方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码。

python单元测试--这个必须有相关推荐

  1. Python单元测试--使用装饰器实现测试跳过和预期故障

    Python单元测试unittest中提供了一下四种装饰器实现测试跳过和预期故障.(使用Python 2.7.13) 请查考Python手册中: https://docs.python.org/dev ...

  2. Python单元测试去哪儿了?

    如果您正在编写库或应用程序,则单元测试文件会放在哪里? 将测试文件与主应用程序代码分开是很好的选择,但是将它们放在应用程序根目录内的" tests"子目录中是很尴尬的,因为这样会使 ...

  3. Python单元测试框架Pyunit 的使用

    Python单元测试框架Pyunit 使用示例: 1 import unittest 2 3 class Person: 4 def age(self): 5 return 34 6 def name ...

  4. Python单元测试框架之pytest 3 -- fixtures

    From: https://www.cnblogs.com/fnng/p/4769020.html Python单元测试框架之pytest -- fixtures 2015-08-29 13:05 b ...

  5. Python单元测试最佳实践

    Are you ready? ↓↓↓ 今天的课程为< Python单元测试>,内容共分为三个部分:单元测试的概念.工具与方法.Coverage 统计单元测试覆盖率的工具和Mock 简化单元 ...

  6. python单元测试工具_Python的单元测试工具——unittest小结

    简介 unittest是Python的内建模块,是Python单元测试的事实标准,也叫PyUnit.使用unittest之前,先了解如下几个概念: test case:测试用例,可以通过创建unite ...

  7. Python 单元测试详解

    作者:yukkizhang,腾讯 CSIG 测试工程师 本文直接从常用的 Python 单元测试框架出发,分别对几种框架进行了简单的介绍和小结,然后介绍了 Mock 的框架,以及测试报告生成方式,并以 ...

  8. python单元测试mock_Python单元测试的Mock是怎么回事

    单元测试 什么是单元测试, 维基百科上是这么定义的: unit testing is a method by which individual units of source code, sets o ...

  9. python单元测试示范卷_Python单元测试--Unittest

    原标题:Python单元测试--Unittest 什么是单元测试 单元测试是用来对最小可测试单元(如一个函数.一个类或者一个模块)进行检查和验证.尤其是在对代码进行修改或重构后,可以快速准确的定位出现 ...

  10. python单元测试_python单元测试

    http://pyunit.sourceforge.net/ 目录 Python 单元测试框架 .................................................... ...

最新文章

  1. apache使用.htaccess删除.html扩展名_Web前端入门:html元素解析
  2. 安装apache+gd2(jpeg,png等)+mysql-client+php脚本
  3. 行业第一份应用报告,伯克利盘点当前企业如何使用区块链
  4. java mybatis XML文件中大于号小于号转义(转载)
  5. C#里面的三种定时计时器:Timer
  6. 使用大数据闪存打造融合数据平台
  7. SAIF MBA2011年学费与资助政策发布公告
  8. 连续4年财务造假 造假金额过亿!捧红杨幂的欢瑞世纪被重罚
  9. 使用use strict指令的目的
  10. 收费英超与中国球迷相互抛弃
  11. WNM6002 N通道增强功能MOS场效应晶体管
  12. 金融借贷中的风险控制
  13. com.android.dx.cf.iface.ParseException
  14. 华为HCIE-CloudComputing备考笔记-2021.10
  15. 台式计算机如何上无线网络,台式机如何无线上网
  16. Linux内核数据结构之 radix tree
  17. word文档批量处理表格
  18. DbUtils框架(这是一个耗时耗力的差事)
  19. java中的package关键字
  20. 游泳过后,耳朵进水怎么办,中耳进水

热门文章

  1. ZK实现分布式锁原理
  2. 针对陌生社交软件 —— 探探的三点建议
  3. 自动驾驶商用,小马智行、百度Apollo各有妙招?
  4. VS2019的C语言如何使用bool变量
  5. java实现Excel转图片
  6. Mac版本EXCEL导入数据 (Excel真香)
  7. Windows 下npm升级方法
  8. [转载]人生经典的60句话~慢慢体会~
  9. git 命令查看分支的创建者是谁
  10. 赛威商业进销存管理系统