python ---- doctest用法
2016-01-24 16:09
561 查看
http://my.oschina.net/lionets/blog/268542
doctest 是一个 Python 发行版自带的标准模块。本篇将分别对使用 doctest 的两种方式——嵌入到源代码中和做成独立文件做基本介绍。
在 Python 的官方文档中,对 doctest 的介绍是这样的:
doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果
即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。
doctest 的编写过程就仿佛你真的在一个交互式 shell(比如 idle)中导入了要测试的模块,然后开始一条条地测试模块里的函数一样。实际上有很多人也是这么做的,他们写好一个模块后,就在 shell 里挨个测试函数,最后把 shell 会话复制粘贴成 doctest 用例。
下面使用的例子是一个只有一个函数的模块,其中签入了两个 doctest 的测试用例。
unnecessary_math.py:
注意测试代码的位置,前面说过 doctest 的测试用例就像文档字符串一样,这句话的内涵在于:测试用例的位置必须放在整个模块文件的开头,或者紧接着对象声明语句的下一行。也就是可以被
fail。
示例的运行输出为:
上例中启动测试的方式是在
这里
如果不想(或不能)把测试用例写进源代码里,则还可以使用一个独立的文本文件来保存测试用例。
几乎同样的格式。运行方法可以分为在 Python shell 里运行或者在系统 shell 里运行:
bash/cmd.exe:
doctest 是一个 Python 发行版自带的标准模块。本篇将分别对使用 doctest 的两种方式——嵌入到源代码中和做成独立文件做基本介绍。
doctest 的概念模型
在 Python 的官方文档中,对 doctest 的介绍是这样的:doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果
即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。
doctest 的编写过程就仿佛你真的在一个交互式 shell(比如 idle)中导入了要测试的模块,然后开始一条条地测试模块里的函数一样。实际上有很多人也是这么做的,他们写好一个模块后,就在 shell 里挨个测试函数,最后把 shell 会话复制粘贴成 doctest 用例。
举个例子
下面使用的例子是一个只有一个函数的模块,其中签入了两个 doctest 的测试用例。unnecessary_math.py:
""" 这里也可以写 """ 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。运行输出与上面基本一样。
独立文件模式
如果不想(或不能)把测试用例写进源代码里,则还可以使用一个独立的文本文件来保存测试用例。可选的一些解释性内容... >>> from test import multiply >>> multiply(2,3) 6 >>> multiply('baka~',3) 'baka~baka~baka~'
几乎同样的格式。运行方法可以分为在 Python shell 里运行或者在系统 shell 里运行:
>>> import doctest >>> doctest.testfile('example.txt')
bash/cmd.exe:
$ python -m doctest -v example.txt
相关文章推荐
- python ThreadLocal
- 进击python第4篇:初探模块
- python 两种导入的区别
- Anaconda中安装python3.4环境
- Python+Django+Mysql+Eclipse开发环境配置(Windows)
- Python工程师面试题集合
- 如何使用 50 行 Python 代码制作一个计算器
- 用Python Pandas处理亿级数据
- 用 Python 和 OpenCV 检测和跟踪运动对象
- [Leetcode]105. Construct Binary Tree from Preorder and Inorder Traversal@python
- python脚本检查网页能否打开
- python进阶学习三——第四天
- 21行python代码实现拼写检查器
- 使用py2exe将python3程序转换成exe文件
- [Leetcode] 98. Validate Binary Search Tree @python
- python序列通用操作符
- Python&Numpy:tile函数
- 【机器学习实验】学习Python来分类现实世界的数据
- MySQL Schema设计(三)利用Python操作Schema
- [Leetcode]97. Interleaving String @python