1.背景

当需要测试较为复杂的module,class或者系统的功能时,如果一个一个的去测试就会显得很麻烦,如果每项测试又有一定的配置或者设置的话,比如每个测试都要新建一个对象之类的,那就更麻烦了。单元测试的初衷就是使得这些测试自动化,高效率的完成。有人可能会说自己写个程序全部用assert来判断就可以了啊,然而,assert在raise一个exception之后就停止工作了,自己再从头构建一个测试系统当然也可以,但是标准库unittest已经完成了这项工作,有必要了解下,避免重复造轮子。

2.单元测试中的几个重要的概念

(1)test fixture

test fixture是在进行单元测试前后所必须进行的操作,比如在每此测试前,创建数据库,新建文件,或者打开服务器;每次测试后的关闭文件,关闭服务器或者其他清理工作等。更直白的说,就是为单元测试顺利进行及结束所“营造”的一种环境。

(2)test case

test case是单元测试的最基本的要素,即单一场景被测试的正确与否,在单元测试中是以unittest.TestCase的实例来表现的,任何test cases必须是TestCase子类的实例。test case必须是自洽的(self contained),这样才能独立运行或者自由的跟其他test case组合在一起被测试。

(3)test suite

是test case,甚至与test suite的集合,用来进行一起有机的整体的测试。

(4) test runner

test runner 是一个可以有序的进行测试工作,然后把结果反馈给用户的组件,它可以是GUI,或者命令窗口式的,等等。

3.基本操作

以一个简单的例子来说明:

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO') def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper()) 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()

 先上一个小的单元测试代码片段(用来测试string类的方法),通过TestStringMethods类(是unittest.TestCase的子类)来创建一个test case,该类的3个方法均以 'test'开头,这个告诉了test runner 哪些方法要被测试。

每个测试的关键是用assertEqual来核查预定结果,用assertTrue或者assertFalse来核查条件,用assertRaises来核查是否既定的exception被捕捉。

之前说test fixture的概念,那么“营造”测试的环境的工作是谁来完成的呢?答案是 setUp() 和 tearDown(),如果每次的测试前都需要 dosomething(),那么就把 dosomething() 放在setUp()方法中,如果每次测试后都需要 doanotherthing(),那么就把 doanotherthing()放在 tearDown()下;需要注意的是如果 setUp()报错了,就不再测试了,如果setUp()没报错,tearDown()都会被执行,不论测试成功与否。

4.启动方法

值得一提的是,最好将测试代码与被测试代码分成不同的文件。在测试时,可以直接运行测试代码,或者通过命令的方法。

python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
python -m unittest tests/test_something.py
python -m unittest -v test_module #冗杂模式,即提供更多测试信息

5.更多

详见python 官方文档。

Python单元测试标准库unittest简单学习的更多相关文章

  1. python笔记-标准库unittest

    unittest核心工作原理 unittest中最核心的四个概念是:test case, test suite, test runner, test fixture. 一个TestCase的实例就是一 ...

  2. Python的标准库介绍与常用的第三方库

    Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...

  3. 【python】标准库的大致认识

    正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...

  4. Python 3标准库 第十四章 应用构建模块

    Python 3标准库 The Python3 Standard Library by  Example -----------------------------------------第十四章   ...

  5. C++标准库<string>简单总结

    C++标准库<string>简单总结 在C++中,如果需要对字符串进行处理,那么它自带的标准库<string>无疑是最好的选择,它实现了很多常用的字符处理函数. 要想使用标准C ...

  6. python 使用标准库连接linux实现scp和执行命令

    import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...

  7. python calendar标准库基础学习

    # -*- coding: utf-8 -*-# 作者:新手__author__ = 'Administrator'#标准库:日期时间基础学习:calendar:处理日期#例1import calen ...

  8. 如何美观地打印 Python 对象?这个标准库可以简单实现

    前不久,我写了一篇文章回顾 Python 中 print 的发展历史 ,提到了两条发展线索: 明线:早期的 print 语句带有 C 和 Shell 的影子,是个应用程序级的 statement,在最 ...

  9. python linecache标准库基础学习

    #python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...

  10. python StringIO标准库基础学习

    #标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连 ...

随机推荐

  1. Flink学习(十五) 滑动事件时间窗口加上水位线开始窗口时间如何确定?(底层源码)

    先看上一节的代码程序 package com.wyh.windowsApi import org.apache.flink.streaming.api.TimeCharacteristic impor ...

  2. 大数据之路Week08_day06 (Zookeeper搭建)

    Zookeeper集群搭建 在本文中Zookeeper节点个数(奇数)为3个.Zookeeper默认对外提供服务的端口号2181 .Zookeeper集群内部3个节点之间通信默认使用2888:3888 ...

  3. phpinclude-labs做题记录

    Level 1 file协议 payload:?wrappers=/flag Level 2 data协议 去包含data协议中的内容其实相当于进行了一次远程包含,所以data协议的利用条件需要 ph ...

  4. 多机器的键鼠互通——Synergy/Deskflow配置记录

    Synergy (1.14.6) 情况一样,那么感觉就是机器之间TCP连接有问题,测试不同 一些测试命令 ss -tlnp | grep 24800 # 查看端口情况 sudo lsof -i :24 ...

  5. [I.2]个人作业:软件案例分析

    项目 内容 这个作业属于哪个课程 2025春季软件工程(罗杰.任健) 这个作业的要求在哪里 [I.2]个人作业:软件案例分析 我在这个课程的目标是 在PSP中精进个人代码技术,在TSP中提高团队合作凝 ...

  6. laravel The Process class relies on proc_open, which is not available on your PHP installation.

    解决办法: 在php.ini中,找到disable_functions选项,看看后面是否有proc_open函数被禁用了,去掉proc_get_status,proc_open即可

  7. kvm内存优化--KSM

    一.KSM(Kernel SamePage Merging) 1.KSM简介 KSM允许内核在多个进程(包括虚拟机)之间共享完全相同的内存页,KSM让内核扫描检查正在运行中的程序并且比较他们的内存,若 ...

  8. dxSpreadSheet的报表

    这个玩意还真的很棒.几乎把excel的都融进来了.现在说Repoert. In addition to all the functionality available in the Spreadshe ...

  9. study Rust-2【环境与配置,随机数】

    Rust教程资料很多.但是,这是教程学习资料感觉挺好!推荐给你https://doc.rust-lang.org/stable/book/ (简体中文译本)在线阅读 学习rust开始有点感觉了.美好的 ...

  10. 使用Python解决氢原子问题

    引言 大家好!今天我们将讨论一个非常经典的物理问题-氢原子问题,并使用 Python 来进行求解.氢原子问题是量子力学中的基础问题,它帮助我们理解原子内部的电子结构及其能量水平.通过这篇文章,大家将学 ...