现在的软件开发过程中,测试往往关系到一个项目的成败。所以,我们非常有必要学习如何测试自己所编写的代码。那么,python能够在这方面做些什么呢?
首先,我们编写一个自己的类文件。
例1. widget.py
class Widget: def __init__(self,size=(40,40)): self._size=size def getSize(self): return self._size def resize(self,width,height): self._size=(width,height) def dispose(self): pass
采用手工方式进行单元测试:
#-*-coding:UTF-8-*- #python的测试模块 from widget import Widget class TestWidget: def testSize(self): expectedSize=(40,40) widget=Widget() if widget.getSize()==expectedSize: print "test [Widget]:getSize works perfected!" else: print "test [Widget]:getSize doesn't work!" #测试 if __name__=='__main__': myTest=TestWidget() myTest.testSize()
手工编写的这种测试方法存在很多问题:
1.测试程序的写法没有一定的规范可以遵循,十个程序员可能写出完全不同的测试程序来
2.每个程序员如果都有自己不同的测试类的方法,光维护这些被测试的类都够麻烦了,更不用说维护测试类。
3.测试用的代码可能比程序本身还多,大大加大了程序员的工作量。
所以,基于以上几点,python推出了它自己的一个框架来帮助我们完成这些功能——PyUnit
使用python的PyUnit测试框架:
#-*-coding:UTF-8-*- from widget import Widget import unittest class WidgetTestCase(unittest.TestCase): def setUp(self): self.widget=Widget() def tearDown(self): self.widget=None def testSize(self): self.assertEqual(self.widget.getSize(),(40,40)) #构造测试集 def suite(): suite=unittest.TestSuite() suite.addTest(WidgetTestCase("testSize")) return suite #测试 if __name__=="__main__": unittest.main(defaultTest='suite')
在采用这个单元测试框架后,使得所有python程序员都可以使用同样的单元测试方法,测试过程成为了一个有序的行为。这就是这个框架所带来的最大的好处。
python2.1及其以后的版本都将pyUnit作为一个标准模块了,不需要额外下载。