# 将要被测试的类 class Widget: def __init__(self, size = (40, 40)): self._size = size def getSize(self): return self._size def resize(self, width, height): if width < 0 or height < 0: raise ValueError, "illegal size" self._size = (width, height) def dispose(self): pass
测试文件:widgetTest.py
# 执行测试的类 from widget import Widget import unittest class WidgetTestCase(unittest.TestCase): def setUp(self): self.widget = Widget() def tearDown(self): self.widget.dispose() self.widget = None def testSize(self): self.assertEqual(self.widget.getSize(), (40, 40)) def testResize(self): self.widget.resize(100, 100) self.assertEqual(self.widget.getSize(), (100, 100)) # 测试 if __name__ == "__main__": # 构造测试集 suite = unittest.TestSuite() suite.addTest(WidgetTestCase("testSize")) suite.addTest(WidgetTestCase("testResize")) # 执行测试 runner = unittest.TextTestRunner() runner.run(suite)
执行测试代码,测试完的结果:
C:\App\py_test\test>python diwgetTest.py .. ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK C:\App\py_test\test>
可以分几步进行, 首先我们的测试类要继承于unittest.TestCase. 如果采用动态测试的方法可以为每个需要测试的方法编写测试方法,使用assertEqual( , ). 然后把我们的测试都放到unittest.TestSuite()容器中,最后使用 unittest.TextTestRunner().run(suite)方法自动测试。
参考:
http://www.ibm.com/developerworks/cn/linux/l-pyunit/index.html
http://www.cnblogs.com/ysisl/archive/2009/08/17/1548054.html
python 单元测试 使用摘要
主要步骤:
1。编写完备的单元测试用例
2。根据测试用例测试点编写程序
3。每编写完一个功能,执行测试用例,然后修改代码,直到该点涉及用例全部通过
4。所有用例通过测试,停止编码
5。发现新bug和开发新版本时,及时更新测试用例
编写用例
使用方法
python自带unittest模块,编写的测试用例类继承unittest.TestCase类,所有测试函数以test开头,执行时,执行unittest.main(),所有测试类中以test开头的函数自动执行
保存文件:testproject.py,简单例子如下:
import unittest #import testproject class mytestproject1(unittest.TestCase): def testcase1(self): #等于运算 self.assertEquals(7/2,3) def testcase2(self): #等于运算 self.assertEquals("".join(['a','b','c']),"abc") class mytestproject2(unittest.TestCase): def testException(self): #出现异常 self.assertRaises(ZeroDivisionError,lambda x:3/x,0) def testcase2(self): #不等于运算 self.assertNotEqual("".join(['a','b','c']),"abcd") if __name__ == '__main__': unittest.main()
执行后,会报告每个函数执行情况
测试用例的编写
1。针对性
每个用例,即test函数,必须只解决一个问题,这样定位问题会很简单
2。独立性
每个用例之间没有影响,一个的输出不会影响到另外一个的执行
3。完备性
每个用例所挑选的例子应该有代表性,尽可能增加覆盖度
4。顺序
对于每个功能点来说,可能涉及到不同的方面,这些用例最好用一个类组织起来,并按照一定的逻辑顺序排列,这个对开发是有指导作用的
从测试对象来讲,测试用例应该具备以下条件:
1。功能性用例
做什么的问题
2。反面用例
不能做什么的问题,对处理对象的限定
3。适应性,健壮性用例
其他的输入,达到安全性,可知性
unittest的接口:
主要用到unittest.TestCase中的接口,基本的是equal系列和raises系列。具体格式参见 help('unittest')
具体的assert的使用,可参看:python assert使用说明
unittest帮助文档,可参看:unittest文档翻译