Python中怎么进行单元测试
既然是测试,那我们得有被测试的代码,我们先定义一个简单的函数,这个函数的功能就是接收一个姓名,并返回一句问候语句。
say_hello_function.py
def hello_name(name):
greet = "Hello , "
return greet + name.title()
显然,关于单元测试Python也给我们提供了相应的模块(unittest),单元测试:用于确定函数的某方面没有问题;测试用例:即一组单元测试,在各个情况下的行为都符合我们的预期。
一、成功通过的测试
编写测试用例的步骤:1.先导入unittest模块;2.创建一个类(任意名)继承unittest.TestCase;3.编写需要测试的代码对函数进行各方面的测试。我们先只用上面一个函数举例即只包含一个方法的测试用例,主要检查函数hello_name 运行之后是否符合我们的预期。
test_say_hello.py
#coding=gbk //因为本人用的编辑器编码为GBK,所以需要加这一行,如果你的是utf-8,将gbk改为utf-8即可(主要是为了让Python能识别注释与字符串中的中文字符)
import unittest from say_hello_function import hello_name class HelloTest(unittest.TestCase):
"""用于测试say_hello_function.py"""
def test_hello_name(self):
"""是否能正确处理Joker 这个名字"""
hello_str = hello_name('Joker')
self.assertEqual(hello_str,'Hello , Joker') unittest.main()
解释:国际惯例,先导入unittest模块,以及欲测试的函数hello_name(),第6行代码中,我们创建了一个名为HelloTest的类且继承了unittest.TestCase类,虽然这个类名你可以随便取,但最好让人见名知意,比如我所取的类名中包含Test,让人很简单的知道这是个测试类,继承unittest.TestCase类 这是必须的不能随意,因为这样Python才会知道如何运行你编写的测试。
这个类只包含一个方法,用于测试hello_name()函数的一个方面。我们给方法命令为test_hello_name(),诶,这个方法名不能随意取,必须得以test_ 开头,这样Python才能在运行的时候运行所有的以test_开头的方法。
第10 行我们调用了hello_name()函数 并将函数返回的结果存储到变量hello_str 中,我们在第11 行代码中,使用了unittest中最为有用的方法之一:断言方法。断言显而易见,就是用来核实得到的结果是否与我们预期的一致。在这里我们知道hello_name()函数返回 Hello +,(逗号) + 名字(且首字母大写),单词与符号之间都有一个空格,因此我们所预期的是“Hello , Joker”,为了验证我们所想,我们即调用unnittest的方法assertEqual() 并向它传递两个参数 hello_str 和 “Hello , Joker ”,将hello_str 的值与后者字符串进行比较,如果相等,就相安无事,而如果不相等,事儿就大了。
我们运行该测试,控制台打印如下:

第一行有一个点,表示有一个测试通过了,虚线下面的一行表示,Python运行了一个测试,所消耗时间不到0.001秒,而最后一行的OK 则表示所有的用例都通过了。综上,在给函数hello_name() 传入一个名字为“Joker”时,该函数总能正确处理。修改该函数后,再次运行这个测试用例,如果它通过了,我们就知道在给定Joker这个名字时,这个函数还是可以正确处理。
未完待续......
你以为有钱人他们很快乐吗?对的,他们的快乐,你想象不到。
Python中怎么进行单元测试的更多相关文章
- 在Python中进行自动化单元测试的教程
From: https://www.jb51.net/article/64119.htm 一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必 ...
- python中的单元测试pyUnit
python中的单元测试pyUnit 在Python中进行单元测试时需要用到PyUnit模块,Python 2.1及其以后的版本都将PyUnit作为一个标准模块,但如果你使用的是较老版本的Pyth ...
- Python中的单元测试模块Unittest快速入门
前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug.如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有 ...
- Python 中 unittest 单元测试框架中需要知识点
现在正在使用 unittest 框架,我们来记录下这个框架的知识点: unittest 框架:我们在写接口用例的时候,会继承 unittest 当中的 TestCase 的类和方法,私有方法除外,来识 ...
- Python中异常(Exception)的总结
Python中的异常处理 异常处理的语句结构 try: <statements> #运行try语句块,并试图捕获异常 except <name1>: <statement ...
- 使用 Python Mock 类进行单元测试
数据类型.模型或节点——这些都只是mock对象可承担的角色.但mock在单元测试中扮演一个什么角色呢? 有时,你需要为单元测试的初始设置准备一些“其他”的代码资源.但这些资源兴许会不可用,不稳定,或者 ...
- 功能式Python中的探索性数据分析
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 这里有一些技巧来处理日志文件提取.假设我们正在查看一些Enterprise Splunk提取.我们可以用Splunk来探索数据.或者我们可以 ...
- [翻译]Mock 在 Python 中的使用介绍
目录 Mock 在 Python 中的使用介绍 原文链接与说明 恐惧系统调用 一个简单的删除函数 使用 Mock 重构 潜在陷阱 向 'rm' 中加入验证 将文件删除作为服务 方法 1:模拟实例的方法 ...
- Python中不尽如人意的断言Assertion
Python Assert 为何不尽如人意 Python中的断言用起来非常简单,你可以在assert后面跟上任意判断条件,如果断言失败则会抛出异常. >>> assert 1 + 1 ...
随机推荐
- A.出题人的RP值
链接:https://ac.nowcoder.com/acm/contest/358/A 题意: 众所周知,每个人都有自己的rp值(是个非负实数),膜别人可以从别人身上吸取rp值. 然而当你膜别人时, ...
- 关于 ie8不兼容的一些方法
ie8 不兼容的方法 $(function(){ //添加数组IndexOf方法 if (!Array.prototype.indexOf){ Array.prototype.indexOf = fu ...
- light OJ 1282 - Leading and Trailing 数学 || double技巧
http://lightoj.com/volume_showproblem.php?problem=1282 #include <cstdio> #include <cstdlib& ...
- [github][https模式下提交记住密码]
git版本 1.7.9以后 1. 开启 git config --global credential.helper cache 2. 设置时间 git config credential.helpe ...
- 【持续更新】HTML5 基础知识
文档类型声明 <!DOCTYPE html> 必不可少,位于文件第一行. 字符编码 <meta charset="UTF-8"> 语义化标记元素 heade ...
- Docker快速构建Redis集群(cluster)
Docker快速构建Redis集群(cluster) 以所有redis实例运行在同一台宿主机上为例子 搭建步骤 redis集群目录清单 . ├── Dockerfile ├── make_master ...
- WebService学习之旅(五)基于Apache Axis2发布第一个WebService
上篇博文介绍了如何將axis2 webservice引擎安装到Web容器中,本节开始介绍如何基于apache axis2发布第一个简单的WebService. 一.WebService服务端发布步骤 ...
- 倒计时器 CountDownTimer
使用介绍 开发中经常会遇到一些和倒计时有关的场景,比如发送验证码的按钮,会在点击发送后,显示倒计时间,倒计时结束后才能够刷新按钮,再次允许点击.为了不阻塞软件的运行,又要实时刷新界面,我们通常会用到 ...
- jquery mobile 的手指上下滑动文章、导航栏
导航栏的js设置 <!--导航栏的滚动 --> <script type="text/javascript"> var myScroll, pullDown ...
- 关于&0xF0的一些认识
首先,要明白0xF0转换成二进制是多少 ----- 1111 0000(0xF0相当于高四位保留,低四位置为0) 我们拿麻将的一万(0x01).一条(0x11).一筒(0x21) 一万的二进制原码 ...