Python的单元测试(二)
title: Python的单元测试(二)
date: 2015-03-04 19:08:20
categories: Python
tags: [Python,单元测试]
在Python的单元测试(一)中,我们讲了单元测试的概念以及一个简单的单元测试例子。
在这个例子中,只有三个函数,于是可以把每个函数的输出结果打印到屏幕上,再用肉眼去看结果是否符合预期。然而假设有一个程序,有二十个类,每个类又有几十个函数,有些函数的输出结果还多达几十行,在这种情况下,肉眼如何看得出?
当然你可以使用if判断
if 输出结果 == 预期结果:
return True
else:
print u'不相等'
这个时候,你发现,程序有几个函数,后三行就要重复几次,本着代码简洁的原则,你把这个判断的过程写到一个函数中:
def isequal(output,right_output):
if output == right_output:
return True
else:
print u'不相等'
那么恭喜你,你步入正规了,然而,这一切已经有人为你做好了。欢迎unittest模块出场。
unittest supports test automation, sharing of setup and shutdown code for tests, aggregation of tests into collections, and independence of the tests from the reporting framework. The unittest module provides classes that make it easy to support these qualities for a set of tests.
Python的官方文档这样写到,unittest支持自动化测试,测试的安装分享和关闭代码……
一句话说来,就是,unittest很好用。
还是用上一次的readandadd.py来演示unittest的基本用法,首先介绍unittest的一个函数,assertEqual(first,second),这个函数的作用是检查变量first的值与second的值是否相等,如果不相等就抛出错误。
先创建utest.py文件,输入以下代码并运行:
#-*-coding:utf-8-*-
import unittest
import readandadd
class basictest(unittest.TestCase): #类名可以随便取
def testread(self): #每个函数都要以test开头
output = readandadd.read('1.txt')
self.assertEqual(output,'2,3')
def testgetnum(self):
output = readandadd.getnum('2,3')
self.assertEqual(output,['2', '3'])
def testaddnum(self):
output = readandadd.addnum([2,3])
self.assertEqual(output,5)
if __name__ == '__main__':
unittest.main()
运行结果如下:
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
你也许会说,就一个ok,什么都没有啊。那我先把testread()函数下面的
self.assertEqual(output,'2,3')
改为
self.assertEqual(output,'2,4')
在运行utest.py看看输出结果如何:
..F
======================================================================
FAIL: testread (__main__.basictest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "E:/mystuff/unitest/utest.py", line 8, in testread
self.assertEqual(output,'2,4')
AssertionError: '2,3' != '2,4'
----------------------------------------------------------------------
Ran 3 tests in 0.000s
FAILED (failures=1)
这里准确的找出了错误的位置和错误的具体内容。注意看最上面,有个
..F
猜测它可能是标示错误的位置。保持testread的错误不改,再把testgetnum()函数中的以下内容
self.assertEqual(output,['2', '3'])
改为
self.assertEqual(output,['2', '6'])
再运行utest.py程序,输出结果如下:
.FF
======================================================================
FAIL: testgetnum (__main__.basictest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "E:/mystuff/unitest/utest.py", line 12, in testgetnum
self.assertEqual(output,['2', '6'])
AssertionError: Lists differ: ['2', '3'] != ['2', '6']
First differing element 1:
3
6
- ['2', '3']
? ^
+ ['2', '6']
? ^
======================================================================
FAIL: testread (__main__.basictest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "E:/mystuff/unitest/utest.py", line 8, in testread
self.assertEqual(output,'2,4')
AssertionError: '2,3' != '2,4'
----------------------------------------------------------------------
Ran 3 tests in 0.001s
FAILED (failures=2)
可以看出,这里分别把两个错误显示了出来。并且第一行变成了
.FF
所以,第一行的内容应该从右往左读,它标明错误函数在所有函数的相对位置。
现在再把testread()和testgetnum()改回去,再看看全部正确的输出:
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
印证了那句话,没有消息就是最好的消息。
这篇文章介绍了单元测试模块unittest的assertEqual的基本用法,下一篇文章将要更加全面的介绍unittest模块。
本文首发地址:http://kingname.info/2015/03/04/pythonunittest2/
作者:青南
转载请注明出处。
Python的单元测试(二)的更多相关文章
- Python的单元测试(一)
title: Python的单元测试(一) author: 青南 date: 2015-02-27 22:50:47 categories: Python tags: [Python,单元测试] -- ...
- Python 单元测试框架系列:聊聊 Python 的单元测试框架(一):unittest
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- python排序之二冒泡排序法
python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...
- python基础——单元测试
python基础——单元测试 如果你听说过“测试驱动开发”(TDD:Test-Driven Development),单元测试就不陌生. 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的 ...
- Intellij Idea系列之导Jar包与编写单元测试(二)
Intellij Idea系列之导Jar包与编写单元测试(二) 一.初衷 对于很多的初学者来说,Intellij如何导入jar包感到很迷惑,甚至在网上搜过相关文章之后还是云里雾里,本博客通过图文并茂 ...
- Python 基础语法(二)
Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- 初学 Python(十二)——高阶函数
初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...
- python/MySQL练习题(二)
python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...
随机推荐
- 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert
使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...
- 一道返回num值的小题目
题目描述: 实现fizzBuzz函数,参数num与返回值的关系如下: .如果num能同时被3和5整除,返回字符串fizzbuzz .如果num能被3整除,返回字符串fizz .如果num能被5整除,返 ...
- 前端学HTTP之内容协商
前面的话 一个URL常常需要代表若干不同的资源.例如那种需要以多种语言提供其内容的网站站点.如果某个站点有说法语的和说英语的两种用户,它可能想用这两种语言提供网站站点信息.理想情况下,服务器应当向英语 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(68)-微信公众平台开发- 资源环境准备
系列目录 前言: 本次将学习扩展企业微信公众号功能,微信公众号也是企业流量及品牌推广的主要途径,所谓工欲善其事必先利其器,调试微信必须把程序发布外网环境,导致调试速度太慢,太麻烦! 我们需要准备妥当才 ...
- 将 instance 部署到 OVS Local Network - 每天5分钟玩转 OpenStack(130)
上一节创建了 OVS 本地网络 first_local_net,今天我们会部署一个 instance 到该网络并分析网络结构.launch 一个 instance,选择 first_local_net ...
- C#多线程之线程池篇3
在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...
- Hawk 6. 编译和扩展开发
Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以 ...
- UVa 122 Trees on the level
题目的意思: 输入很多个节点,包括路径和数值,但是不一定这些全部可以构成一棵树,问题就是判断所给的能否构成一棵树,且没有多余. 网上其他大神已经给出了题目意思:比如我一直很喜欢的小白菜又菜的博客 说一 ...
- 【HTML】Html页面跳转的5种方式
目录结构: // contents structure [-] html实现 javascript方式实现 结合了倒数的javascript实现(IE) 解决Firefox不支持innerText的问 ...
- SAP CRM 显示消息/在消息中进行导航
向用户展示消息,在任何软件中都是十分重要的. 在SAP CRM WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它 消息类和消息号: 我在SE91中创建了如下的消息类和 ...