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


                 现在的软件开发过程中,测试往往关系到一个项目的成败。所以,我们非常有必要学习如何测试自己所编写的代码。那么,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

  • 相关阅读:
    BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径( tarjan )
    BZOJ 1040: [ZJOI2008]骑士( 树形dp )
    BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )
    HDU 5667 Sequence 矩阵快速幂
    FZU 2225 小茗的魔法阵 扫描线+树状数组
    UVA 11916 Emoogle Grid 离散对数 大步小步算法
    UVA 11754 Code Feat 中国剩余定理+暴力
    FZU 2092 收集水晶 dp+bfs
    FZU2090 旅行社的烦恼 巧妙floyd 最短路
    UVA 11426 GCD
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4145132.html
Copyright © 2020-2023  润新知