一、单元测试的含义

unittest单元测试框架的设计灵感来源于Junit(Java语言的单元测试框架),它与其他语言的单元测试框架风格相类似,支持自动化测试、为测试共享setUp和shutDown、它可以在将测试用例聚合到一起形成一个集合一起执行的同时在测试报告中展示独立的测试结果。

为了达到此目的,unittest支持几个重要的面向对象式的概念:

1、test fixture

  一个test fixture所做的事情是执行单个或多个测试用例时的准备工作和执行结束后的一些相关清理工作,这包括:创建临时或代理数据库、目录或开始服务器进程。。。

2、test case

  一个test case 是一个独立的测试单元,针对于一组特定的输入得到的特殊相应的验证,通过继承unittest提供的基类TestCase, 然后可以创建新的测试用例

3、test suite

  一个test suite 是一组测试用例的集合,也可以是一组test suite的集合,也可以两者混合的集合,test suite就是用来聚合你想要一起执行的测试用例的

4、test runner

  一个test runner 是一个协调测试执行并向用户提供执行结果的组建,它可以使用图形界面、文本界面或返回一个特殊值标识测试执行的结果

二、实例代码

下面我们看Python官方给的一个简单的小例子,来测试三个字符串

import unittest

class TestStringMethods(unittest.TestCase):  # 测试类继承了unittest.TestCase类,因此在该类里可以创建新的测试用例

    def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO') # ‘foo’是一个字符串,upper()方法会将这个字符串转成大写,assertEqual是unittest提供的一个断言方法,用来比较逗号前后两个值是否相等 def test_isupper(self):
self.assertTrue('FOO'.isupper()) # assertTrue也是unittest提供的断言方法,用来判断括号内的内容是真是假,如果是真则断言成功,否则为失败,'FOO'是个字符串并且是大写,调用isupper()方法,返回结果
self.assertFalse('Foo'.isupper()) # assertFalse则正好相反,如果括号内返回为假则断言成功,否则为失败 def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2) if __name__ == '__main__':
unittest.main()

三、代码解析:

在第三个用例里,定义了一个字符串,s='hello world', 然后进行了断言,断言的条件里调用了一个split()方法,实际上初学者看到这会比较懵,s.split()到底返回的是什么,它是否等于逗号后边['hello', 'world']?

学这个东西就是要多试试,那么接下来我们进行一系列尝试来认识一下split()

启动命令行CMD,进入python环境

尝试1:定义一个字符串  s = 'hello world', 然后 print(s)回车,结果应该是  hello world

尝试2:如果我们敲入print(s.split())然后回车呢呢,结果应该是['hello', 'world'], 到此我们就得到了答案,第三条用例里的断言self.assertEqual(s.split(), ['hello', 'world'])是成功

尝试3:如果我们print(s.split(2)) 会是什么结果?  如果我们print(s.split('o'))又会是什么结果?

        with self.assertRaises(TypeError):
s.split(2)

在第三个用例里,我们也看到了两行代码,split()函数我们已经知道它能干什么了,那么with是什么?assertRaises在这又在干什么?

with,我们总提python之美,那么这就是美丽之处,with语句提供一个有效的处理异常和完成清理工作的机制,它让代码更简练,有点懵没关系,换一个方式说,如果不用with,要达到同等效果的的话要用什么呢?try...except...finally,这是另一个课题了并不是此处的重点,读者朋友可以先忽略它不要打断学习unittest的思路

assertRaises是什么呢?unittest 模块提供了用于测试函数是否在给定无效输入时引发特定异常的方法,这个方法就是assertRaises,我们在回去看代码,s.split(2), 很明显我们前边已经尝试过执行参数为2的情况,报了异常,也就是2并不是split函数的合法参数,我们传给2这个参数,它理应报异常,那么好with self.assertRaises(TypeError): 在干什么,它想要的就是看看split()在得到了非法参数的时候是否报一个TypeError,此处读者可能要整理一下思路,仔细阅读此段内容

最后的unittest.main(),有了它我们就有了一个简单的方式执行这个脚本,unittest.main()提供了命令行界面运行脚本的方式

假设我们上边的脚本保存在文件testingunit.py里并将它保存在桌面,然后我们启动命令行,输入“python C:\Users\davieyang\Desktop\testingunit.py”  看看是个什么结果?

C:\Users\用户名>python C:\Users\davieyang\Desktop\testingunit.py
....
----------------------------------------------------------------------
Ran tests in .001s OK

我们能看到4个....,它的意义我们共4个用例,点表示测试通过,那么如果点表示测试通过,什么表示测试失败呢? 是“F”,如果测试遇到异常呢? 是“E”

如果我们执行“python C:\Users\davieyang\Desktop\testingunit.py -v”又是什么结果?

C:\Users\用户名>python C:\Users\davieyang\Desktop\testingunit.py -v
test_isupper (__main__.TestStringMethods) ... ok
test_list (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok ----------------------------------------------------------------------
Ran tests in .002s OK

单元测试框架之unittest(一)的更多相关文章

  1. unittest单元测试框架之unittest 框架的总结(七)

    1. Unittest 是 python 自带的单元测试框架,可以用其作为自动化框架来组织测试用例(测 试用例的执行顺序)的执行. 2. Unittest 框架的流程: 写好 TestCase 通过 ...

  2. 单元测试框架之unittest(七)

    一.摘要 前篇文章已经详细介绍了unittest框架的特性,足以满足我们日常的测试工作,但那并不是unittest的全部,本片博文将介绍一些应该知道但未必能经常用到的内容 然而,想全部掌握unitte ...

  3. Python单元测试框架:unittest(一)

    Python单元测试框架unittest使用方法讲解 主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测 ...

  4. unittest单元测试框架之unittest 框架的总结2(八)

    unittest 下的属性 1.Unittest.TestCase:所有测试用例类继承的基本类 2.Unittest.main():将一个单元测试模块变为可直接运行的测试脚本 If __name__ ...

  5. 单元测试框架之unittest(六)

    一.摘要 本片博文将介绍unittest框架的一些轻便有效的特性,在我们的测试中经常可以用到 如果有一些测试方法不想执行,如果有些测试方法在某些条件下不执行 该当如何? 如果有些方法未在unittes ...

  6. 单元测试框架之unittest(二)

    一.摘要 本章笔者将详细介绍组织测试代码的相关内容,所用的测试例子会是冒泡排序,笔者在从业这么久之后回想很多面试都要问冒泡排序,虽然不知道为什么要问这个,但还是希望大家掌握,它与自动化测试关系不大属于 ...

  7. 单元测试框架之unittest(五)

    一.摘要 单元测试里很重要的一个部分就是断言,unittest为我们提供了很多断言方法,断言方法分为三类,一种是用来断言被测试的方法的,另一种是测试是否抛正确异常的,第三种是用来断言日志是否包含应有信 ...

  8. 单元测试框架之unittest(四)

    一.摘要 假设我们有一组测试方法差别非常小,比如仅仅是所需要的参数有少许变化时,我们的自动化测试如何进行?unittest框架为这种场景提供了一种方式,它允许我们用subTest()上下文管理器在一个 ...

  9. 3. 单元测试框架(unittest)1——TestCase

    1. import unittest 引入unittest模块:   2. class SearchTest (unittest.TestCase): 定义一个继承于TestCase类的子类:   3 ...

随机推荐

  1. Java中get()方法和set()方法如何使用?

    在java中,为了保证数据的安全性,我们会把数据定义为private等(私有.封装),如果想要调用就会用到set()方法与get方法或者构造函数方法.这里说的是第一种方法,set()与get(),既然 ...

  2. Introduction - Supervised Learning

    摘要: 本文是吴恩达 (Andrew Ng)老师<机器学习>课程,第一章<绪论:初识机器学习>中第3课时<监督学习>的视频原文字幕.为本人在视频学习过程中逐字逐句记 ...

  3. 2019-10-20 李宗盛 spss作业

    SPSS: 1.有关SPSS数据字典的说法,正确的是 A.SPSS数据集的数据字典可以复制到其他数据集中 B.SPSS数据集的数据字典是不能复制的 C.SPSS的数据字典可以通过“复制”和“粘贴”在不 ...

  4. bootstrap基础学习【网格系统】(三)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 在VMware上安装centos

    Windows,VMware和Centos三者的关系 VMware安装.centos安装 在 VMware 上安装 CentOS 第 1 步:打开 VMware,点击创建新的虚拟机 第 2 步:选择典 ...

  6. mysql 触发器检测表数据添加,进而调用存储过程检测数据,进而调用存储过程添加数据

    触发器: beginDECLARE user_mes INT(64);SELECT user_id into user_mes FROM order_orderlist where id = new. ...

  7. [LuoguP2164][SHOI2007]交通网络_拓扑排序_概率期望

    交通网络 题目链接:https://www.luogu.org/problemnew/solution/P2164 数据范围:略. 题解: 直接算不好算,我们考虑建反图然后$Toposort$. 这样 ...

  8. jumpserver0.4.0与python3版本安装

    环境: 系统:CentOS 6.5 Python版本:Python3.6 安装目录:/Data/apps/ 一. 环境准备: 1.  基本工具库: # yum -y install sqlite-de ...

  9. LUA的table实现

    数据结构 下面的结构体是lua中所定义的table typedef struct Table { CommonHeader; lu_byte flags; /* 1<<p means ta ...

  10. Linux系统忘记root密码,紧急模式下更改密码

    linux忘记密码命令概括: 1.开机按e,rd.break,ctrl+x: 2.mount  -o remount,rw /sysroot  3.chroot  /sysroot 4.passwd( ...