Python中的Unittest基本使用

前言:

Unittest又名单元测试,主要用于测试自己写的代码的正确性和完备性,也方便自己和他人对代码的维护。在软件开发过程中,测试驱动开发的理念是一种好的开发习惯。

例如现在我们写了一个求绝对值的函数my_abs,存放在myAbs.py中

def my_abs(number):
    if not (isinstance(number, int) or isinstance(number, float)):
        raise ValueError("invalid value %s" % number)
    else:
        if(number >= 0):
            return number
        else:
            return -number

此处的my_abs函数对参数做了检查,参数必须是一个数(python的数只有int和float型)。那么如果想要测试这个函数的正确性,我们需要写一个测试函数,用于测试函数的各个分支情况。

基于unittest的的测试代码如下:

import unittest

from myAbs import my_abs
class TestmyAbs(unittest.TestCase):
    def test_positive(self):
        self.assertEqual(my_abs(1), 1)

    def test_zero(self):
        self.assertEqual(my_abs(0), 0)

    def test_negative(self):
        self.assertEqual(my_abs(-1), 1)

    def test_inputerror(self):
        with self.assertRaises(ValueError):
            my_abs("1")

if __name__ == "__main__":
    unittest.main()

上述代码存放在test_myAbs.py中。

unittest的基本使用方法是:

  • 1. 文件命名以test_开头,这样方便unittest自动执行,unittest能自动识别目录下test_开头的文件执行
  • 2. import unittest     这个是运行unittest的前提
  • 3. 定义class要以Test开头,必须要从unittest.TestCase继承,且不能有init方法,测试的方法或者函数以test_开头
  • 4. 测试方法中使用assert进行断言

在上面测试代码的TestMyabs类的方法中,分别对正数,零和负数的情况进行了测试,使用assertEqual进行结果的判定;另外测试中还对输入参数是无效的情况进行了判定,使用了with语句和assertRaises的方式,针对期望抛出来的异常进行判定

unittest的运行方式:

1. 单独运行test_myAbs.py文件,前提是在文件尾增加

    if __name__ == "__main__":
        unittest.main()

2. 发送命令 python -m unittest .\myAbs.py

当发送命令python -m unittest时,会执行当前目录下所有test_开头的文件

运行结果如下:

Testing started at 4:43 PM ...
Launching pytest with arguments C:/work/myPythonPrj/test_myAbs.py --no-header --no-summary -q in C:\work\myPythonPrj

============================= test session starts =============================
collecting ... collected 4 items

test_myAbs.py::TestmyAbs::test_inputerror PASSED                         [ 25%]
test_myAbs.py::TestmyAbs::test_negative PASSED                           [ 50%]
test_myAbs.py::TestmyAbs::test_positive PASSED                           [ 75%]
test_myAbs.py::TestmyAbs::test_zero PASSED                               [100%]

============================== 4 passed in 0.03s ==============================

Process finished with exit code 0

到此这篇关于Python中的Unittest基本使用的文章就介绍到这了,更多相关Python Unittest 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 一篇文章搞懂Python Unittest测试方法的执行顺序

    目录 Unittest 回到主题 源码初窥 回到问题的本质 1. 以字典序的方式编写test方法 2. 回归本质,从根本解决问题 总结 Unittest unittest大家应该都不陌生.它作为一款博主在5-6年前最常用的单元测试框架,现在正被pytest,nose慢慢蚕食. 渐渐地,看到大家更多的讨论的内容从unittest+HTMLTestRunner变为pytest+allure2等后起之秀. 不禁感慨,终究是自己落伍了,跟不上时代的大潮了. 回到主题 感慨完了,回到正文.虽然unitte

  • python中使用 unittest.TestCase单元测试的用例详解

    目录 单元测试和测试用例 各种断言方法 函数测试 1.准备测试函数 2.编写一个能使用它的程序 3.对函数进行单元测试 类测试 1.准备测试的类 2.编写一个能使用它的程序 3.对类进行单元测试 注意 单元测试和测试用例 python标准库中的模块unittest提供了代码测试工具.单元测试用于核实函数的莫个方面没有问题:测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求.良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试.全覆盖测试用例包含一整套

  • Python中unittest的断言方法详解

    目录 断言方法: 方法有: 下面是做的例子,后边是运行结果: 总结 断言方法: 是unittest提供的一组方法,可以通过这些方法完成期望结果和实际结果的对比 方法有: assert+空格+要判断的语句+逗号+'报错语句'        python提供 assertEqual(a,b,msg='报错语句')        若a==b不报错,否则报错内容为msg assertNotEqual(a,b,msg='报错语句')        若a!=b不报错,否则报错内容为msg assertIn(

  • python测试框架unittest和pytest区别

    一.用例编写规则 (1)unittest提供了test cases.test suites.test fixtures.test runner相关的类,让测试更加明确.方便.可控.使用unittest编写用例,必须遵守以下规则: 测试文件必须先import unittest 测试类必须继承unittest.TestCase 测试方法必须以"test_"开头 测试类必须要有unittest.main()方法 (2)pytest是python的第三方测试框架,是基于unittest的扩展框

  • Python接口自动化系列之unittest结合ddt的使用教程详解

    前面一篇我们已经把unittest的常用用法都已经讲过了,可能很多小伙伴有个疑问,unittest框架怎么做数据驱动呢?这节我们就来学习一下. 1.unittest 没有自带数据驱动功能. 所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成. DDT是 "Data-Driven Tests"的缩写. 资料:http://ddt.readthedocs.io/en/latest/ 2.什么是ddt? 测试步骤相同,代码一样,测试数据不同,当我们输入一组测试数据

  • python中unittest框架应用详解

    目录 1.Unittest为Python内嵌的测试框架,不需要特殊配置 2.编写规范 总结 1.Unittest为Python内嵌的测试框架,不需要特殊配置 2.编写规范 需要导入 import unittest 测试类必须继承unittest.TestCase 测试方法以 test_开头 模块和类名没有要求 TestCase 理解为写测试用例 TestSuite 理解为测试用例的集合 TestLoader 理解为的测试用例加载 TestRunner 执行测试用例,并输出报告 import un

  • python中的unittest框架实例详解

    在python中我们学习了不少理论知识,那么对相关的程序进行测试,就显得很重要了.本篇要讲的是unittest框架,我们可以用它来做一些测试工作,又或者是相关代码的编写.下面我们就unittest框架的说明.特性和4种字模块分别带来介绍,大家一起来看具体内容. 1.unittest说明 unittest是Python自带的单元测试框,具备编写用例.组织用例.执行用例.输出报告等自动化框架的条件,可以用来作自动化测试框架的用例组织执行框架. 2.unittest框架特性 (1)提供用例组织与执行:

  • Python中的Unittest基本使用

    前言: Unittest又名单元测试,主要用于测试自己写的代码的正确性和完备性,也方便自己和他人对代码的维护.在软件开发过程中,测试驱动开发的理念是一种好的开发习惯. 例如现在我们写了一个求绝对值的函数my_abs,存放在myAbs.py中 def my_abs(number): if not (isinstance(number, int) or isinstance(number, float)): raise ValueError("invalid value %s" % num

  • 利用Python中unittest实现简单的单元测试实例详解

    前言 单元测试的重要性就不多说了,可恶的是Python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它是测试而非功能,是很多人没兴趣触及的东西.但是作为一个优秀的程序员,不仅要写好功能代码,写好测试代码一样

  • Python中unittest用法实例

    本文实例讲述了Python中unittest的用法,分享给大家供大家参考.具体用法分析如下: 1. unittest module包含了编写运行unittest的功能,自定义的test class都要集成unitest.TestCase类,test method要以test开头,运行顺序根据test method的名字排序,特殊方法: ① setup():每个测试函数运行前运行 ② teardown():每个测试函数运行完后执行 ③ setUpClass():必须使用@classmethod 装

  • Python中unittest的数据驱动详解

    目录 前言 一.ddt简单介绍 二.ddt处理各种类型数据 1.分析ddt工作原理 2.ddt测试元祖数据 2.1测试单组元素 2.2测试多组未分解元素 2.3测试多组分解元素 3.ddt测试列表数据 3.1多组列表拆分数据 3.2复杂列表(含字典)拆分数据 4.ddt测试字典数据 4.1多组字典数据拆分 5.ddt测试字典列表数据结合 6.ddt测试读取文件数据 前言 在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程是一样的.如果重复去写操作过程会增加代码量,对应

  • 利用Python中的mock库对Python代码进行模拟测试

     如何不靠耐心测试 通常,我们编写的软件会直接与那些我们称之为"肮脏的"服务交互.通俗地说,服务对我们的应用来说是至关重要的,它们之间的交互是我们设计好的,但这会带来我们不希望的副作用--就是那些在我们自己测试的时候不希望的功能. 比如,可能我们正在写一个社交软件并且想测试一下"发布到Facebook的功能",但是我们不希望每次运行测试集的时候都发布到Facebook上. Python的unittest库中有一个子包叫unittest.mock--或者你把它声明成一

  • Python中DJANGO简单测试实例

    本文实例讲述了Python中DJANGO简单测试的用法.分享给大家供大家参考.具体如下: 这里以facebook台湾的测试版为例. 仅仅测试用户登录,主要说明测试的使用和django环境的设置. 代码如下: import os import sys import unittest import hashlib TEST_MEMBER_ID = 11 SNS_ID = 100002309745702 TEST_SESSION_KEY = '125737724171219|2.AQCp7ctCYXJ

  • 在Python中进行自动化单元测试的教程

    一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施.正像软件熵(software entropy)所描述的那样:一个程序从设计很好的状态开始,随着新的功能不断地加入,程序逐渐地失去了原有的结构,最终变成了一团乱麻(其实最初的"很好的状态"得加个问号).测试的目的说起来其实很简单也极具吸引力,那就是写出高质量的软件并解决软件熵这一问题. 可惜的是,软件开发人员很少能在编码

随机推荐