既然是测试,那我们得有被测试的代码,我们先定义一个简单的函数,这个函数的功能就是接收一个姓名,并返回一句问候语句。

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中怎么进行单元测试的更多相关文章

  1. 在Python中进行自动化单元测试的教程

    From: https://www.jb51.net/article/64119.htm 一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必 ...

  2. python中的单元测试pyUnit

    python中的单元测试pyUnit   在Python中进行单元测试时需要用到PyUnit模块,Python 2.1及其以后的版本都将PyUnit作为一个标准模块,但如果你使用的是较老版本的Pyth ...

  3. Python中的单元测试模块Unittest快速入门

    前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug.如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有 ...

  4. Python 中 unittest 单元测试框架中需要知识点

    现在正在使用 unittest 框架,我们来记录下这个框架的知识点: unittest 框架:我们在写接口用例的时候,会继承 unittest 当中的 TestCase 的类和方法,私有方法除外,来识 ...

  5. Python中异常(Exception)的总结

    Python中的异常处理 异常处理的语句结构 try: <statements> #运行try语句块,并试图捕获异常 except <name1>: <statement ...

  6. 使用 Python Mock 类进行单元测试

    数据类型.模型或节点——这些都只是mock对象可承担的角色.但mock在单元测试中扮演一个什么角色呢? 有时,你需要为单元测试的初始设置准备一些“其他”的代码资源.但这些资源兴许会不可用,不稳定,或者 ...

  7. 功能式Python中的探索性数据分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 这里有一些技巧来处理日志文件提取.假设我们正在查看一些Enterprise Splunk提取.我们可以用Splunk来探索数据.或者我们可以 ...

  8. [翻译]Mock 在 Python 中的使用介绍

    目录 Mock 在 Python 中的使用介绍 原文链接与说明 恐惧系统调用 一个简单的删除函数 使用 Mock 重构 潜在陷阱 向 'rm' 中加入验证 将文件删除作为服务 方法 1:模拟实例的方法 ...

  9. Python中不尽如人意的断言Assertion

    Python Assert 为何不尽如人意 Python中的断言用起来非常简单,你可以在assert后面跟上任意判断条件,如果断言失败则会抛出异常. >>> assert 1 + 1 ...

随机推荐

  1. IP服务-7-系统日志

    默认情况下.Cisco路由器和交换机并不在NVRAM (非易失性内存)中记录事件:工程师可以使用命令logging buffered改变设备的这一默认行为.并且还可以使用额外参数来设定日志缓存的大小. ...

  2. WKWebView简单使用

    #import <WebKit/WebKit.h> @interface SchoolOverviewsViewController ()<WKUIDelegate,WKNaviga ...

  3. BOM主要对象属性方法总结

    BOM window对象 浏览器实例,全局对象 1.窗口位置: screenTop,screenLeft(screenX,screenY):窗口相对于屏幕左边和上边的位置 moveTo(x,y):将窗 ...

  4. scrapy分布式原理

    scrapy分布式原理   关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键 ...

  5. Arch Linux 安装记(安装到移动硬盘)

    一转眼传说中装起来难于上青天,用起来险如上刀梯(容易滚挂),绰号“洗发水”并被戏称为“邪教”的 Arch Linux 已经用了几个月.某些关于其安装难度和稳定性的传说实在太夸张了,反而觉得这才是适合懒 ...

  6. Hive_Hive的安装

    嵌入模式不推荐使用. 本地模式多用于开发和测试. 远程模式多用于生产环境.

  7. Jasper_crosstab_Parameter_Crosstab Header

    corsstab: Q : how to show filed value at crosstab Header Part? A : via pass parameter in crosstab. i ...

  8. Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.

    在搭建Hadoop集群的时候,遇到了这样的一个报错. 就在启动HDFS调用命令: start-dfs.sh 的时候,报错: 然后输密码就一直很奇怪,反正一直运行不成功. 百度了半天,确定是core-s ...

  9. vue http请求 vue-resource使用方法

    1.安装vue-resource扩展: npm install vue-resource 2.在main.js中引入 import http from 'vue-resource' 3.使用方法 // ...

  10. aspectj xml

    1.接口和类 1.1 ISomeService 接口 public interface ISomeService { public void doSome(); public void dade(); ...