详解Python之unittest单元测试代码


Posted in Python onJanuary 24, 2018

前言

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

本次我将介绍如何使用Python模块unittest中的工具来测试代码。

测试函数

首先我们先编写一个简单的函数,它接受姓、名、和中间名三个参数,并返回完整的姓名:

names.py

def get_fullname(firstname,lastname,middel=''):
  '''创建全名'''
  if middel:
    full_name = firstname + ' ' + middel + ' ' + lastname
    return full_name.title()
  else:
    full_name = firstname + ' ' + lastname
    return full_name.title()

然后再当前目录下编写调用函数程序

get_name.py

from names import get_fullname

message = "Please input 'q' to quit."
print(message)

while True:
  first = input("Please input your firstname: ")
  if first == 'q':
    break
  last = input("Please input your lastname: ")
  if last == 'q':
    break
  middels = input("Please input your middel name or None: ")
  if last == 'q':
    break
  formant_name = get_fullname(first,last,middels)
  print("\tYour are fullname is: " + formant_name.title())

调用结果:

Please input 'q' to quit.
Please input your firstname: xiao
Please input your lastname: peng
Please input your middel or None:
    Your are fullname is: Xiao Peng
Please input your firstname: xiao
Please input your lastname: peng
Please input your middel or None: you
    Your are fullname is: Xiao You Peng
Please input your firstname: q

进程已结束,退出代码0

创建测试程序

创建测试用例的语法需要一段时间才能习惯,但测试用例创建后,再针对函数的单元测试就很简单了。先导入模块unittest以及要测试的函数,再创建一个继承函数unittest.TestCase的类,

并编写一系列方法对函数行为的不同方便进行测试。

下面介绍测试上面names.py函数是否能够正确的获取姓名:

Test_get_name.py

import unittest
from names import get_fullname

class NamesTestCase(unittest.TestCase):
  '''定义测试类'''
  def test_get_name2(self):
    '''测试2个字的名字'''
    formatied_name2 = get_fullname('xiao','pengyou')
    self.assertEqual(formatied_name2,'Xiao Pengyou')
  def test_get_name3(self):
    '''测试3个字的名字'''
    formatied_name3 = get_fullname('xiao','peng',middel='you')
    self.assertEqual(formatied_name3,'Xiao Peng You')
if __name__ == '__init__':
  unittest.main()

测试结果:

Ran 2 tests in 0.034s

OK

两个测试单元测试通过测试!

在当前的大目录下会生成一个测试报告,可以通过浏览器进行打开查看。

详解Python之unittest单元测试代码

由图可知,两个测试通过,并显示测试的时间!!!

unittest.TestCase的各种断言方法

unittest各种断言方法

方      法 用      途
assertEqual(a,b) 核实a == b
assertNotEqual(a,b) 核实a != b
assertTrue(x) 核实x为True
assertFalse(x) 核实x为False
assertIn(item,list) 核实item在list中
assertNotIn(item,list) 核实item不在list中

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的另外几种语言实现
Jan 29 Python
使用Python中的greenlet包实现并发编程的入门教程
Apr 16 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
PyQt5每天必学之单行文本框
Apr 19 Python
关于python写入文件自动换行的问题
Jun 23 Python
pymongo中聚合查询的使用方法
Mar 22 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
如何运行带参数的python脚本
Nov 15 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
python之pygame模块实现飞机大战完整代码
Nov 29 Python
python爬取拉勾网职位数据的方法
Jan 24 #Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 #Python
Python实现的生成格雷码功能示例
Jan 24 #Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 #Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 #Python
深入浅析Python中的yield关键字
Jan 24 #Python
Python3.6安装及引入Requests库的实现方法
Jan 24 #Python
You might like
第四章 php数学运算
2011/12/30 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
面试常见的js算法题
2017/03/23 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
python实用代码片段收集贴
2015/06/03 Python
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
学习Python爬虫的几点建议
2020/08/05 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
英国工具中心:UK Tool Centre
2017/07/10 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
总经理工作职责范文
2014/03/14 职场文书
函授生自我鉴定
2014/03/25 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
丧事主持词
2015/07/02 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
初中历史教学反思
2016/02/19 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android