一、概述

本文介绍python的单元测试框架unittest,这是Python自带的标准模块unittest。unittest是基于java中的流行单元测试框架junit设计的,其功能强大且灵活,对于熟悉junit的人来说掌握unittest很简单。

unittest涉及的知识点较多,但核心的就那一些,本文只介绍最核心和基础的内容。

类似junit,使用unittest编写python的单元测试代码,包括如下几个步骤:

1)编写一个python类,继承 unittest模块中的TestCase类,这就是一个测试类

2)在上面编写的测试类中定义测试方法(这个就是指的测试用例),每个方法的方法名要求以 test 打头,没有额外的参数。 在该测试方法中 调用被测试代码,校验测试结果,TestCase类中提供了很多标准的校验方法,如 最常见的assertEqual。

3)执行 unittest.main() ,该函数会负责运行测试,它会实例化所有TestCase的子类,并运行其中所有以test打头的方法。

二、案例1

我们下面看一个例子,编写如下的python文件,为了简单,我们将被测函数与测试代码放在一个文件中了:

#coding=utf-8
import unittest
#被测试方法
def cal(a,b):
return a+b #测试类
class CalTest(unittest.TestCase):
def testA(self):
expected = 6
result = cal(2,4)
self.assertEqual(expected,result) def testB(self):
expected = 0
result = cal(2,1)
self.assertEqual(expected,result) #执行所以测试代码
if __name__=='__main__':unittest.main()

上面的测试类CalTest中有两个测试方法,显然testB方法我们估计让校验出错。在命令行下执行上述python文件,输出如下信息:

.F

======================================================================

FAIL: testB (__main__.CalTest)

----------------------------------------------------------------------

Traceback (most recent call last):

File "test2.py", line 19, in testB

self.assertEqual(expected,result)

AssertionError: 0 != 3

----------------------------------------------------------------------

Ran 2 tests in 0.001s

FAILED (failures=1)

上面显示出了执行出错的用例,以及出错信息。最后两句给出了整个测试执行所花的时间,以及测试失败的用例数。

如果我们将testB修改正确,运行结果输出如下:

..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

三、案例2

上面的例子只有一个测试文件(python文件)。在实际的项目中,往往又多个测试文件,每个测试文件针对不同的业务代码进行测试。

那这时该怎么去执行所有测试文件中的测试用例呢?

假设我们有test1.py测试文件中定义了一个测试类CalTest1 , 另外一个测试test2.py测试文件中定义了一个测试类CalTest2.

这样要想同时能执行这两个测试文件中的测试用例,可编写如下的一个总的测试文件,作为执行的总入口:

#coding=utf-8
import unittest
from test1 import CalTest1
from test2 import CalTest2
if __name__=='__main__':unittest.main()

从上面的例子,可以看出,使用unittest框架还是比较简单和方便的。

Python单元测试:unittest使用简介的更多相关文章

  1. Python单元测试unittest - 单元测试框架

    一.unittest简介 unitest单元测试框架最初是有JUnit的启发,它支持测试自动化,共享测试的设置和关闭代码,将测试聚合到集合中,以及测试与报告框架的独立性. 二.unittest相关概念 ...

  2. python单元测试unittest

    单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和 调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而 ...

  3. [转]python单元测试unittest

    单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而单 ...

  4. python单元测试unittest实例详解

    转自:http://blog.csdn.net/five3/article/details/7104466 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也 ...

  5. python单元测试unittest、setUp、tearDown()

    单元测试反应的是一种以测试为驱动的开发模式,最大的好处就是保证一个程序模块的行为符合我们设计的测试用例,在将来修改的时候,可以极大程度保证该模块行为仍然是正确的. 下面我编写一个Dict来,这个类的行 ...

  6. Python单元测试unittest【转自https://www.cnblogs.com/feng0815/p/8045850.html】

    [转自https://www.cnblogs.com/feng0815/p/8045850.html] Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一 ...

  7. Python单元测试--unittest(一)

    unittest模块是Python中自带的一个单元测试模块,我们可以用来做代码级的单元测试. 在unittest模块中,我们主要用到的有四个子模块,他们分别是: 1)TestCase:用来写编写逐条的 ...

  8. selenium自动化测试、Python单元测试unittest框架以及测试报告和日志输出

    部分内容来自:https://www.cnblogs.com/klb561/p/8858122.html 一.基础介绍 核心概念:test case, testsuite, TestLoder,Tex ...

  9. python单元测试-unittest

    python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 1.介绍下unittest的基本使用方法: 1)import unittest 2)定义一个继承自unittes ...

  10. 【Pytest】python单元测试框架pytest简介

    1.Pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高.根据pytest的官方网站介绍 ...

随机推荐

  1. [原创] 小而美 | Mac上鲜为人知,但极大提升效率的小工具

    热爱收集实用又好用的软件,工具类软件不在多,发挥作用,提高效率最重要~推荐几个压箱底的藏货 一.Noizio -自然而然的白噪声,专注工作 Noizio是一款OS X 下的白噪音应用,可以让自己觉着是 ...

  2. Oracle集合操作函数:union、intersect、minus

    [转]Oracle集合操作函数:union.intersect.minus 集合操作符专门用于合并多条select 语句的结果,包括:UNION, UNION ALL, INTERSECT, MINU ...

  3. C++函数传值调用

    C++的函数的参数调用是传值方式. 想要改变传值调用,有引用和指针两种方式.其中,引用的实现机理也是通过一个指针,但是具体和指针传值的方式又不一样.具体见:C++中的指针与引用 对于指针传值,其实实际 ...

  4. 百度apistore第三方登陆

    最近做一个个人博客,其中的登陆模块我想使用第三方登陆来做.上网搜一下有好多例子,但是大多数都是一个网站的第三方登陆,如QQ.微博.人人,没有集成的组件,于是就在网上搜一下百度的apistore,百度果 ...

  5. c++读取文件内容并保存到二维数组

    每行数据最后需要Tab处理 #include <iostream> #include <fstream> #include <string> using names ...

  6. HTML禁止使用右键

    <html> <script type="text/javascript"> <!-- document.oncontextmenu=function ...

  7. Vue.jsbrowserify项目模板

    Vue.js——60分钟browserify项目模板快速入门   概述 在之前的一系列vue.js文章,我们都是用传统模式引用vue.js以及其他的js文件的,这在开发时会产生一些问题. 首先,这限定 ...

  8. Android 优化性能之 如何避免--过度绘制

    可能有些人不明白什么是过度绘制,简单言,我们app一个页面所显示的效果是由像素一帧一帧绘制而成.过度绘制就是意味着这一帧被绘制多次.如果是静态的布局,可能影响不是很大,如果是动态的,比如ListVie ...

  9. ios网络学习------8 xml格式数据的请求处理 用代码块封装

    #pragma mark 载入xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从webserver载入数据 NSStri ...

  10. tomcat的JK和JK2

    如今又開始配置JK2,想将Tomcat和apache,但Tomcat上已经不支持对于JK2的开发了,详情请看: Apache-Tomcat mod_jk2 aka JK2 15 November - ...