Python unitest 的使用


作为开发人员,对写的代码进行单元测试是最基本的

对python语言来讲,其单元测试的利器是pyUnit, 这个从Python2.1之后的版本中,就已经是自带的了。

下面通过一个基本的例子来讲述如何来使用unittest.

首先是一个简单的功能。

area.py

  1. class Area:  
  2.     def __init__(self,width=100,length=100):  
  3.         self._width = width  
  4.         self._length = length  
  5.       
  6.     def getWidth(self):  
  7.         return self._width  
  8.   
  9.     def getLength(self):  
  10.         return self._length  
  11.   
  12.     def getArea(self):  
  13.         return self._width*self._length  
  14.   
  15.     def setWidth(self,width):  
  16.         if width <= 0:  
  17.             raise ValueError,"Illeage Width value"  
  18.         self._width = width  
  19.   
  20.     def setLenth(self,length):  
  21.         if length <= 0:  
  22.             raise ValueError,"Illeage Length value"  
  23.         self._length = length   

ut_area.py

  1. from area import Area  
  2. import unittest  
  3.   
  4. class AreaTestCase(unittest.TestCase):  
  5.     def setUp(self):  
  6.         self.area = Area()  
  7.       
  8.     def tearDown(self):  
  9.         self.area = None  
  10.       
  11.     def testArea(self):  
  12.         self.assertEqual(self.area.getArea(),10000)  
  13.       
  14.     def testWidth(self):  
  15.         self.area.setWidth(10)  
  16.         self.assertEqual(self.area.getWidth(),10)  
  17.     def testLength(self):  
  18.         self.area.setLenth(10)  
  19.         self.assertEqual(self.area.getLength(),10)  
  20.   
  21. if __name__ == "__main__":  
  22.     unittest.main()  

我们来看一下,单元测试的结果。


单元测试也可以以如下的方法来实现 

首先我们的测试类要继承于unittest.TestCase. 如果采用动态测试的方法可以为每个需要测试的方法编写测试方法,使用assertEqual( , ). 然后把我们的测试都放到unittest.TestSuite()容器中,最后使用 unittest.TextTestRunner().run(suite)方法自动测试。

  1. suite = unittest.TestSuite()  
  2.     suite.addTest(AreaTestCase("testArea"))  
  3.     suite.addTest(AreaTestCase("testWidth"))  
  4.     suite.addTest(AreaTestCase("testLength"))  
  5.   
  6.   
  7.     runner = unittest.TextTestRunner()  
  8.     runner.run(suite)  
  9.     print "#"*80  
  10.     unittest.main()  

我们把两种方法进行了对比,结果是一样的,


对TestCase,有以下的一些函数可以来使用

相关内容