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

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. [题解](gcd/lcm)luogu_P1072_Hankson的趣味题(NOIP2009)

    连续三次不开longlong导致wa!!! 不开longlong一时爽,一会提交火葬场!!! OI千万条,longlong第一条 乘法不longlong,提交两行泪 暴力luogu就能过了???打好暴 ...

  2. $.each(obj,function(index,value)遍历的学习

    JQuery遍历对象 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  3. fake-useragent

    在编写爬虫进行网页数据的时候,大多数情况下,需要在请求是增加请求头 python下非常好用的伪装请求头的库:fake-useragent,具体使用说明如下: 安装fake-useragent库 pip ...

  4. SpirngMVC-JSON

    Springmvc默认用MappingJacksonHttpMessageConverter对json数据进行转换,需要加入jackson的包,如下: 配置json转换器 在注解适配器中加入messa ...

  5. 执行脚本 提示 command not found

    问题现象: 初学shell,写了个脚本, 1.从windows 写好 脚本,然后部署到 linux 上. 2.chmod +x之后执行提示command not found,系统环境redhat9,用 ...

  6. 由Reference展开的学习

    在阅读Thinking in Java的Containers in depth一章中的Holding references时,提到了一个工具包java.lang.ref,说这是个为Java垃圾回收提供 ...

  7. 关于controller返回的页面js文件和css文件404问题的正式解决

    谨用此博客记录一下这条卡了两个星期的bug…… 还是之前的问题,通过get方法,后台@Controller返回页面然后弹窗.但是不知道为什么一直所有js文件和css文件都报404…… (之前的博客记录 ...

  8. HashMap之put方法流程解读

    说明:本文中所谈论的HashMap基于JDK 1.8版本源码进行分析和说明. HashMap的put方法算是HashMap中比较核心的功能了,复杂程度高但是算法巧妙,同时在上一版本的基础之上优化了存储 ...

  9. DockerSwarm 集群环境搭建

    一.简介 1. 什么是docker swarm? Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 ...

  10. 微信支付v3开发(5) 扫码并输入金额支付

    关键字:微信支付 微信支付v3 动态native支付 统一支付 Native支付 prepay_id 作者:方倍工作室 本文介绍微信支付下的扫描二维码并输入自定义金额的支付的开发过程. 注意 微信支付 ...