您的位置:首页 > 编程语言 > Python开发

12.python的单元测试模块——unittest

2012-04-01 10:39 323 查看
             现在的软件开发过程中,测试往往关系到一个项目的成败。所以,我们非常有必要学习如何测试自己所编写的代码。那么,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作为一个标准模块了,不需要额外下载。

参考资料http://pyunit.sourceforge.net/pyunit_cn.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息