zoukankan      html  css  js  c++  java
  • 测试代码

       编写函数或类时,还可以为其编写测试。通过测试,可确定代码面对各种输入都能够按照要求那样工作。

    单元测试和测试用例:

      单元测试用于核实蛮熟的某个方面没有问题;测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。

    良好的测试用例考虑到了函数可能收到的各种输入,包含针对这些所有情形的测试。

    全覆盖测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现覆盖可能很难。所以通常,最初只要针对

    代码的重要行为编写测试即可,等项目被广泛使用率再考虑全覆盖。

    范例代码:

    #!/usr/bin/env python

    #filename = name_function.py

    def get_formated_name(first,last):

        full_name = first + ' ' + last

        return full_name

    定义了一个函数模块,叫做get_formated_name

    编写一个测试代码,对这个函数进行测试!

    #!/usr/bin/env python

    import unittest

    from name_function import get_formated_name

    class Test_names(unittest.TestCase):    

        def test_first_last_name(self):

            formated_name = get_formated_name('xue','lingming')   

            self.assertEqual(formated_name , 'xue lingming')    ③

    unittest.main()

    首先,导入模块unittest(这是个class),和需要测试的函数get_formatted_name

    在1处,创建一个类,这个类的名字叫做Test_names(可以随意定义),在这个类中必须继承unittest的一个子类

    unittest.TestCase,这个类中只包含一个方法,用于测试get_formatted_name是否可以正确格式化名字。

    在unittest模块的测试代码下,所有test_开始的方法都是自动运行的。

    在3处,我们使用了unittest类最有用的功能之一:断言

    用来核实得到的结果是否与期望的结果一直。

    代码self.assertEqual(formated_name , 'xue lingming') 的意思是说:“将formated_name的值与'xue lingming'进行比较

    如果相等就万事大吉,如果不同就报告’’”

    运行这个测试脚本的结果:

    "test_name_function.py" 11L, 291C written
    [root@Python-Test Alben-PY]# ./test_name_function.py
    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s

    OK

    修改上面的函数,让其可以处理中间名:

    #!/usr/bin/env python

    #filename = name_function.py

    def get_formated_name(first,middle,last):

        full_name = first + ' ' + middle + ' ' + last

        return full_name

     再次测试:

    报错了!!!

    [root@Python-Test Alben-PY]# ./test_name_function.py
    E  """"""""这个E代表Error""""""""
    ======================================================================
    ERROR: test_first_last_name (__main__.Test_names)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
    File "./test_name_function.py", line 8, in test_first_last_name
    formated_name = get_formated_name('xue','lingming')
    TypeError: get_formated_name() missing 1 required positional argument: 'last'  这一行提示我们少一个实参'last'

    ----------------------------------------------------------------------
    Ran 1 test in 0.001s

    FAILED (errors=1)

    解读——

    因为在函数name_function中,我们定义了三个形参“first,middle,last”而测试代码中,只传递了2个位置实参,导致形参‘last’没有获取到实参,进而报错了。

    处理方法:把形参middle定义为可选形参,并且微调主体脚本

    #!/usr/bin/env python

    #filename = name_function.py

    def get_formated_name(first,last,middle=''):

        if middle:

            full_name = first + ' ' + middle + ' ' + last

        else:

            full_name = first + ' ' + last

        return full_name

    只需注意一下,带有默认值的可选形参必须放在最后一个。

    测试效果:

    [root@Python-Test Alben-PY]# ./test_name_function.py
    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s

    OK

  • 相关阅读:
    .Net解析html文档类库HtmlAgilityPack完整使用说明
    C# 中使用JSON
    Property 'submit' of object #<HTMLFormElement> is not a function
    bin/...的访问被拒绝被拒绝的问题
    vs2012 ultimate 密钥
    ASP.NET-自定义HttpModule与HttpHandler
    jQuery同步Ajax带来的UI线程阻塞问题及解决办法
    Windows API
    服务器不安装Excel,实现导出Excel功能
    内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]
  • 原文地址:https://www.cnblogs.com/alben-cisco/p/6859018.html
Copyright © 2011-2022 走看看