Python自动单元测试框架

豆豆网   技术应用频道   2007年03月30日  【字号: 收藏本文

本文详细介绍Python自动单元测试框架

  采用手工方式进行单元测试的Python程序员很可能会写出类似例2的测试代码来,

  例2. manual.py
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()

  稍一留心你不难发现这种手工测试方法存在许多问题。首先,测试程序的写法没有一定的规范可以遵循,十个程序员完全可能写出十种不同的测试程序来,如果每个Python程序员都有自己不同的设计测试类的方法,光维护被测试的类就够麻烦了,谁还顾得上维护测试类。其次,需要编写大量的辅助代码才能进行单元测试,例1中用于测试的代码甚至比被测试的代码还要多,而这毫无疑问将增大Python程序员的工作量。

  为了让单元测试代码能够被测试和维护人员更容易地理解,最好的解决办法是让开发人员遵循一定的规范来编写用于测试的代码,具体到Python程序员来讲,则是要采用PyUnit这一自动测试框架来构造单元测试用例。目前PyUnit已经得到了大多数Python开发人员的认可,成了事实上的单元测试标准。如果采用PyUnit来进行同样的测试,则测试代码将如例3所示:

  例3. auto.py
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')

责编:豆豆技术应用

正在加载评论...