• 【转】python测试框架--doctest


    转自https://my.oschina.net/lionets/blog/268542

    doctest 是一个 Python 发行版自带的标准模块。有两种模式可供使用。

    ##1 doctest 的概念模型

    在 Python 的官方文档中,对 doctest 的介绍是这样的:

    doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果

    即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。

    doctest 的编写过程就仿佛你真的在一个交互式 shell(比如 idle)中导入了要测试的模块,然后开始一条条地测试模块里的函数一样。实际上有很多人也是这么做的,他们写好一个模块后,就在 shell 里挨个测试函数,最后把 shell 会话复制粘贴成 doctest 用例。 举个例子

    下面使用的例子是一个只有一个函数的模块,其中签入了两个 doctest 的测试用例。

    unnecessary_math.py:

        lang:python
    """
    这里也可以写
    """
    def multiply(a,b):
    	"""
    	>>> multiply(2,3)
    	6
    	>>> multiply('baka~',3)
    	'baka~baka~baka~'
    	"""
    	return a*b
    
    if __name__ == '__main__':
    	import doctest
    	doctest.testmod(verbose=True)
    

    注意测试代码的位置,前面说过 doctest 的测试用例就像文档字符串一样,这句话的内涵在于:测试用例的位置必须放在整个模块文件的开头,或者紧接着对象声明语句的下一行。也就是可以被 __doc__ 这个属性引用到的地方。并非像普通注释一样写在哪里都可以。另:verbose 参数用于控制是否输出详细信息,默认为 False,如果不写,那么运行时不会输出任何东西,除非测试 fail。

    示例的运行输出为:

    Trying:
    	multiply(2,3)
    Expecting:
    	6
    ok
    Trying:
    	multiply('baka~',3)
    Expecting:
    	'baka~baka~baka~'
    ok
    1 items had no tests:
        __main__
    1 items passed all tests:
       2 tests in __main__.multiply
    2 tests in 2 items.
    2 passed and 0 failed.
    Test passed.
    

    上例中启动测试的方式是在 __main__ 函数里调用了 doctest.testmod() 函数。这对于纯容器型模块文件来说是一个好办法——正常使用时只做导入用,直接运行文件则进行测试。而对于 __main__ 函数另有他用的情况,则还可以通过命令行来启动测试:

    $ python -m doctest unnecessary_math.py
    $ python -m doctest -v unnecessary_math.py
    

    这里 -m 表示引用一个模块,-v 等价于 verbose=True。运行输出与上面基本一样。 

     

    ##2 独立文件模式

    如果不想(或不能)把测试用例写进源代码里,则还可以使用一个独立的文本文件来保存测试用例。

        lang:python
    可选的一些解释性内容...
    
    >>> from test import multiply
    >>> multiply(2,3)
    6
    >>> multiply('baka~',3)
    'baka~baka~baka~'
    

    几乎同样的格式。运行方法可以分为在 Python shell 里运行或者在系统 shell 里运行:

        lang:python
    >>> import doctest
    >>> doctest.testfile('example.txt')
    

    bash/cmd.exe:

    $ python -m doctest -v example.txt
     
     
     
     
     
     
     
     
  • 相关阅读:
    我的2015技术学习流水账
    Java程序员的现代RPC指南
    我对读计算机软件专业硕士的几点看法
    Hadoop加速器GridGain
    BDD敏捷开发入门与实战
    openstack kilo部署-基础环境
    python学习之成员信息增删改查
    网站监控系统安装部署(zabbix,nagios)
    监控redis数据库应用状态:python,tornado实现
    python 远程执行命令、发布文件
  • 原文地址:https://www.cnblogs.com/qtnt/p/11710013.html
Copyright © 2020-2023  润新知