zoukankan      html  css  js  c++  java
  • python之单元测试--常见问题

    Python在unittest.TestCase中提供了许多断言的方法

    assertEqual(a,b) ---------> 核实a==b

    assertNotEqual(a,b) -----> 核实a!=b

    assertTrue(a) -------------> 核实a==True

    assertFalse(a) ------------> 核实a==False

    assertIn(a,list) -------------> 核实a in list

    assertNotIn(a,list) ---------> 核实a not in list

    (好吧,这个我也是在书上看的,^V^)

    咳咳,下面开始正题了,先说下,我英语水的一笔,所以在命名上会是野路子,哈哈!

    创建了一个文件test001.py

    代码如下:

    def test1(x):
        return  x **2

    无聊的一笔,简单明了

    好的,那下面在同目录下再创建一个测试文件,test002.py

    代码如下:

    #coding:UTF-8
    import
    unittest from test001 import test1 class TestNew(unittest.TestCase): '''这是一个用于测试的类''' def ceshi1(self): '''测试开始1''' a=test1(4) self.assertEqual(a,16)

    if __name__ == '__main__':
    ''' 这是一个测试执行语句 '''
        unittest.main()

    好的,运行代码

    ----------------------------------------------------------------------
    Ran 0 tests in 0.000s
    
    OK

    什么鬼,一脸懵逼,于是问了一下度娘,解释是单元测试方法的命名是有规则的,就是说测试文件test002的def方法必须以test开头,如test_is_file,否者不执行。这脾气我服

    那就说改就改呗!

    #coding:UTF-8
    import unittest
    from test001 import test1
    class TestNew(unittest.TestCase):
        '''这是一个用于测试的类'''
        def test_ceshi_1(self):
            '''测试开始1'''
            a=test1(4)
            self.assertEqual(a,16)
    
    if __name__ == '__main__': 
        ''' 这是一个测试执行语句  '''
        unittest.main()

    再次运行

    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    
    OK

    好的,完美,这个单元就过了!

    但同时请注意,测试结果不是出现OK就表示通过了,有可能是没有被执行

    请看运行结果的第一行,是一个实心的句号‘ .’,全部都是实心句号才表示执行通过

    来,如果我将test002.py中的一行代码修改一下,如下

            a=test1(4)
            self.assertEqual(a,15)
            #4** 2  显然不等于15

    再次运行

    F
    ======================================================================
    FAIL: test_ceshi_0 (__main__.TestNew)
    测试开始-1
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "E:esclipse	estpython_test	est002.py", line 9, in test_ceshi_0
        self.assertEqual(ce_shi,15)
    AssertionError: 16 != 15
    
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    
    FAILED (failures=1)

    第一行,显示的‘F’,表示出错了

    好了接下来,加长一点,test001.py

    def test1(x):
        return  x **2
    
    def test2(name,sal):
        return name.title()+','+str(sal)
    
    def test3(x):
        if x%2==0:
            return "True"
        else:
            return "False"
    
    def test4(x):
        if type(x)==str:
            return 1
        else:
            return 0

    test002.py 如下:

     1 #coding:UTF-8
     2 import unittest
     3 from test001 import test1,test2,test3,test4
     4 class TestNew(unittest.TestCase):
     5     '''这是一个用于测试的类'''
     6     def test_ceshi_0(self):
     7         '''测试开始-1'''
     8         ce_shi=test1(4)
     9         self.assertEqual(ce_shi,16)
    10     
    11     def test_ceshi_1(self):
    12         '''测试2'''
    13         ce_shi2=test2('yin',8000)
    14         self.assertNotEqual(ce_shi2,'yin8000')
    15      
    16     def test_ceshi_2(self):
    17         '''测试3'''
    18         ce_shi3=test3(2)
    19         self.assertTrue(ce_shi3)
    20      
    21     def test_ceshi_3(self):
    22         '''测试4'''
    23         ce_shi4=test3(2.3)
    24         self.assertFalse(ce_shi4)
    25      
    26     def test_ceshi_4(self):
    27         '''测试5'''
    28         ce_shi5=test4('name')
    29         self.assertIn(ce_shi5,[1,2,3])    
    30  
    31     def test_ceshi_5(self):
    32         '''测试6'''
    33         ce_shi6=test4(123)
    34         self.assertNotIn(ce_shi6,[1,2,3])
    35 
    36         
    37 if __name__ == '__main__': 
    38     unittest.main()

    运行一下test002.py

     1 ...F..
     2 ======================================================================
     3 FAIL: test_ceshi_3 (__main__.TestNew)
     4 测试4
     5 ----------------------------------------------------------------------
     6 Traceback (most recent call last):
     7   File "E:esclipse	estpython_test	est002.py", line 24, in test_ceshi_3
     8     self.assertFalse(ce_shi4)
     9 AssertionError: 'False' is not false
    10 
    11 ----------------------------------------------------------------------
    12 Ran 6 tests in 0.001s
    13 
    14 FAILED (failures=1)

    运行结果中第一行显示:第4个测试不通过,原因是AssertionError: 'False' is not false

    好吧,在 Python中 False==0的,所以将test001.py中返回“False”,修改为0,再次运行一下

    1 ......
    2 ----------------------------------------------------------------------
    3 Ran 6 tests in 0.001s
    4 
    5 OK

    完美,以上测试的单元就通过,可以pass了

  • 相关阅读:
    Linux外部设备的使用
    Linux硬件信息查询
    Linux中swap分区设置
    状态检测型防火墙
    CentOS更换源,亲测可用
    Linux文件权限序列简述
    Linux终端打印文本色彩
    Linux 系统命令之netstat
    Linux配置DNS服务器
    水题一枚
  • 原文地址:https://www.cnblogs.com/yin-tao/p/7041488.html
Copyright © 2011-2022 走看看