unittest

python自动单元测试框架 unittest :http://www.ibm.com/developerworks/cn/linux/l-pyunit/
类似于Java的Junit,Python语言的开发人员可以使用Steve Purcell编写的PyUnit作为单元测试框架,使得Python程序猿更加容易地增
加、管理和执行测试用例,并对测试结果进行分析。
unittest除了可以进行常规的单元测试,可经常被各种测试框架绑定使用,如web测试框架selenium。

TestCase类:

下面是一个需要被测试的类widget.py,我们想要测试widget控件当前的size和resize函数
例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):
        if width  0  or height < 0:
            raise ValueError, "illegal size"
        self._size = (width, height)
    def dispose(self):
        pass
现在期望能够测试一个widget类的实例的size和resize函数功能,由此创建了widgettestcase类
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))
 每一个testcase都需要继承unittest类,且包括两个默认函数:setUp和tearDown分别用来做一些初始化工作和收尾工作
剩下两个testSize和testResize函数则是核心测试用例部分
sizeTestCase = WidgetTestCase("testSize")
resizeTestCase = WidgetTestCase("testResize")

最后,需要将他们组织起来执行,这样就引入了testsuite类


TestSuite类:

完整的单元测试很少只执行一个测试用例,开发人员通常都需要编写多个测试用例才能对某一软件功能进行比较完整的测试,这些相
关的测试用例称为一个测试用例集,在PyUnit中是用TestSuite类来表示的
创建一个unittest的TestSuite,并将上面两个testcase加入suite中,将他们组合起来

def suite():
    suite = unittest.TestSuite()
    suite.addTest(WidgetTestCase("testSize"))
    suite.addTest(WidgetTestCase("testResize"))
    return suite
当然,也可以组合多个suitecase,组成一个更庞大的测试用例集合
suite1 = mysuite1.TheTestSuite()
suite2 = mysuite2.TheTestSuite()
alltests = unittest.TestSuite((suite1, suite2))
执行测试用例:
测试用例的执行可以有两种方式 
第一种是直接调用unittest的TextTestRunner接口

# 执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)
另一种是直接调用main接口,使用它可以很方便地将一个单元测试模块变成可以直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中的测试方法,

并自动执行它们。如果Python程序员能够按照约定(以test开头)来命名所有的测试方法,那就只需要在测试模块的最后加入如下几行代码即可

unittest.main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值