这篇文章主要为大家详细介绍了Python 单元测试的简单示例,具有一定的参考价值,可以用来参考一下。

对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!

以前我是不写任何测试的,后来偶尔写单元测试,现在我主动写单元测试 ----- 不得 不承认,测试是有其存在必要性的,要说为什么的话,大概又会引发语言的强弱类型和 是否静态语言之争了吧。

就目前而言,个人认为写单元测试的好处有以下几点:

当修改了代码之后,单元测试可以保证API不会发生变化(假设原需求就不需API发生 变化)。这点可能一般情况下没什么感觉,但是当你去修改前辈留下的代码的时候, 你就会感谢他写了单元测试,最少让你知道了从功能上,这个函数是干什么的,而且 能保证你修改了函数内部实现,但是不影响函数功能。

写单元测试的时候会回想函数的作用,从而自动对函数进行回想和 review。

缺点嘛:耗费时间。单元测试和文档一样,属于非常重要,但是非常耗费时间的工作, 因为要考虑齐全,考虑到的边界条件越多,测试覆盖率越高,程序越可靠,而想这些东 西是很耗费时间精力的。

吐槽完毕,我们来说说目前我知道的几个和测试有关的东西(全程 Python 3)。

Mock

Mock是个好东西呀,遇到测试中出现的不可预知的或者不稳定因素,就用 Mock 来代 替。例如查询数据库(当然像目前我们用的MongoDB,由于特别灵活,可以直接在代码里 把相应的collection替换掉),例如异步任务等。举个例子:

# @param Python和单元测试那些事儿

# @author 512笔记|512Pic.com

import logging

from unittest.mock import Mock

logging.basicConfig(level=logging.DEBUG)

# code

class ASpecificException(Exception):

pass

def foo():

pass

def bar():

try:

logging.info("enter function now")

foo()

except ASpecificException:

logging.exception("we caught a specific exception")

# unittest

def test_foo():

foo = Mock(side_effect=ASpecificException()) # noqa

logging.info("enter function now")

bar()

logging.info("everything just be fine")

if __name__ == "__main__":

test_foo()

# End www_512pic_com

运行一下:

root@arch tests: python test_demo.py

INFO:root:enter function now

INFO:root:enter function now

INFO:root:everything just be fine

# End www_512pic_com

一个简单的测试就这么写好了。来,跟我念,Mock 大法好呀!

doctest

doctest属于比较简单的测试,写在 docstring 里,这样既能测试用,又能当文档 示例,是在是好用之极啊。缺点是,如果测试太复杂,doctest就显得太臃肿了(例如 如果测试之前要导入一堆东西)。举个例子:

# @param Python和单元测试那些事儿

# @author 512笔记|512Pic.com

import logging

logging.basicConfig(level=logging.DEBUG)

def foo():

"""A utility function that returns True

>>> foo()

True

"""

return True

if __name__ == "__main__":

import doctest

logging.debug("start of test...")

doctest.testmod()

logging.debug("end of test...")

# End www_512pic_com

测试结果:

root@arch tests: python test_demo.py

DEBUG:root:start of test...

DEBUG:root:end of test...

# End www_512pic_com

unittest

这个文档确实有点长,我感觉还是仔细去读一下文档比较好(虽然我也没读完)。

# @param Python和单元测试那些事儿

# @author 512笔记|512Pic.com

import unittest

class TestStringMethods(unittest.TestCase):

def setUp(self):

self.alist = []

def tearDown(self):

print(self.alist)

def test_list(self):

for i in range(5):

self.alist.append(i)

if __name__ == '__main__':

unittest.main()

# End www_512pic_com

root@arch tests: python test_demo.py

[0, 1, 2, 3, 4]

.

----------------------------------------------------------------------

Ran 1 test in 0.001s

OK

unittest框架配合上Mock,单元测试基本无忧啦。

pytest

上面的单元测试跑起来比较麻烦,当然也可以写一个脚本遍历所有的单元测试文件,然 后执行。不过 pytest 对unittest有比较好的支持。

pytest默认支持的是 函数 风格的测试,但是我们可以不用这一块嘛(而且很多时候 还是很有用的)。走进项目根目录,输入 pytest 就可以啦。它会自动发现 test_ 开头的文件,然后执行其中 test_ 开头的函数和 unittest 的 test_ 开头的 方法。

root@arch tests: pytest

========================================================= test session starts =========================================================

platform linux -- Python 3.5.2, pytest-3.0.5, py-1.4.31, pluggy-0.4.0

rootdir: /root/tests, inifile:

collected 1 items

test_afunc.py .

====================================================== 1 passed in 0.03 seconds =======================================================

root@arch tests:

# End www_512pic_com

总结

编译器没给python做检查,就只有靠我们手写测试了 :(

另外其实 pytest 和 unittest 都有很多强大的特性,例如 fixture(不知道 咋翻译好),例如 skip 掉某一部分测试。当然我也是知之甚少,所以还是看文档吧。

注:关于Python 单元测试的简单示例的内容就先介绍到这里,更多相关文章的可以留意512笔记的其他信息。

关键词:单元测试

python简单单元测试示范卷_Python 单元测试的简单示例相关推荐

  1. python单元测试示范卷_Python单元测试--Unittest

    原标题:Python单元测试--Unittest 什么是单元测试 单元测试是用来对最小可测试单元(如一个函数.一个类或者一个模块)进行检查和验证.尤其是在对代码进行修改或重构后,可以快速准确的定位出现 ...

  2. python简单单元测试示范卷_Python单元测试简单示例

    本文实例讲述了Python单元测试方法.分享给大家供大家参考,具体如下: Eric书中<Python编程从入门到实践>中的一个例子. <Python编程从入门到实践>随书源码可 ...

  3. python生成随机数random操作_Python random生成随机数示例

    代码中经常有一些生成随机数的需求.特意整理了一下Python中random模块的一些相关使用方法示例. python生成随机数 随机整数: >>> import random > ...

  4. python简单单元测试示范卷,Python单元测试实例详解

    本文实例讲述了python单元测试.分享给大家供大家参考,具体如下: 在python中进行单元测试需要用到自动单元测试框架pyunit,python2.1及其以后的版本都将pyunit作为一个标准模块 ...

  5. python测试代码怎么写_Python 单元测试

    Test your software, or your users will. "Test ruthlessly. Don't make your users find bugs for y ...

  6. python单元测试框架作用_Python单元测试框架:Pytest简介

    Pytest简介 入门简单,文档丰富 支持单元测试.功能测试 支持参数化 重复执行,部分执行,测试跳过 兼容其他测试框架(nose,unittest等) 支持生成html报告 可集成CI环境(Jenk ...

  7. python单元测试框架对比_Python单元测试框架pytest常用测试报告类型

    先前博客有介绍pytest测试框架的安装及使用,现在来聊聊pytest可以生成哪些测试报告 1.allure测试报告 2.生成resultlog文件 #!/usr/bin/python # -*- c ...

  8. python计算机体系三层结构_Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证...

    Python tkinter 实现简单登陆注册 最终效果 开始界面 ​ 注册 登陆 ​ 源码 login.py # encoding=utf-8 from tkinter import * from ...

  9. python实现简单计算器功能键介绍_Python实现的简单计算器功能详解

    本文实例讲述了Python实现的简单计算器功能.分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板: 计算器面板结构 建造一个继承于wx.Fra ...

最新文章

  1. iOS开发8:使用Tool Bar切换视图
  2. SAP中供应商确认功能的应用分析
  3. centos7安装redmine3.4
  4. PYTHON-迭代器,xxx生成式
  5. C++学习之路 | PTA乙级—— 1093 字符串A+B (20 分)(精简)
  6. C++ 你想要的C++面经都在这(附答案 | 持续更新)
  7. 变革,是领导者的特质
  8. WINDOWS XP优化批处理
  9. JavaGuide--Java篇
  10. linux课程以及Linux主要学习哪些内容
  11. 【机器学习】实验一 实验报告
  12. 【题解】【AcWing】1564. 哈希
  13. 云中马在A股上市:总市值约为40亿元,叶福忠为实际控制人
  14. AtCoder Grand Contest 021完整题解
  15. 关于Sklearn的SVM、XGBOOST、随机森林等算回归预测建模的方法及数据提取
  16. 神经网络基础05-注意力机制总结
  17. aquarius Java自定义对象池
  18. 了解Socket吗?什么是socket?
  19. 1+X中级商城集群搭建(三台主机)
  20. “九章”问世了,RSA算法在量子计算机面前还安全吗?

热门文章

  1. hp惠普笔记本电脑黑屏大小写锁定键闪烁报错无法开机怎么办?
  2. leetcode-2 两数相加
  3. python列表(数组)
  4. LeetCode 1021:Remove Outermost Parentheses
  5. springboot之异步调用@Async
  6. Linux安装Nodejs
  7. Bootstrap框架和inconfont、font-awesome使用
  8. python 全栈开发,Day132(玩具管理页面,控制玩具通讯录,基于请求的好友关系建立)...
  9. 关于鼠标、键盘的几个例子
  10. SqlServer2008查询性能优化_第一章