Python单元测试框架-unittest

2024-06-22 21:18

本文主要是介绍Python单元测试框架-unittest,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考
https://docs.python.org/2/library/unittest.html#organizing-tests

import unittestclass 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 stringwith self.assertRaises(TypeError):s.split(2)if __name__ == '__main__':unittest.main()

首先是一个基本的例子,
这个类中有三个方法,以test开头,这种命名会作为测试用例。会通知runner

assertEqual() 检查相等
assertTrue() 检查条件为真
assertFalse() 检查条件为假
assertRaises() 检查会抛出某种异常

这里例子虽然简单,其中特性可以满足我们每天进行的测试了。

做下面的命令行测试时候,请注意Python的版本 ,2.7.10的不报错,可是2.6.6就会报错。

[root@-01-VM-back-test- ut]# /usr/local/bin/python -m unittest test.TestStringMethod.test_upper
test_isupper (test.TestStringMethod) ... ok
test_split (test.TestStringMethod) ... ok
test_upper (test.TestStringMethod) ... ok----------------------------------------------------------------------
Ran 3 tests in 0.000sOK
.
----------------------------------------------------------------------
Ran 1 test in 0.000sOK
[root@back-test- ut]# python -m unittest discover
...
----------------------------------------------------------------------
Ran 3 tests in 0.000sOK

测试用例case是基本的测试块, 而测试用例 又是TestCase的实例,

最基本的 TestCase 类必须重写runTest()方法

import unittestclass DefaultWidgetSizeTestCase(unittest.TestCase):def runTest(self):widget = Widget('The widget')self.assertEqual(widget.size(), (50, 50), 'incorrect default size')

在上个例子里,每次写测试用例,都需要 自己 先构造一个widget很麻烦, unittest提供了 setUp()方法,来帮助我们自动地在每次运行测试用例前,做一下准备工作,像下面这样:

import unittestclass SimpleWidgetTestCase(unittest.TestCase):#准备工作def setUp(self):self.widget = Widget('The widget')#清理工作    def tearDown(self):self.widget.dispose()self.widget = None#01
class DefaultWidgetSizeTestCase(SimpleWidgetTestCase):def runTest(self):self.assertEqual(self.widget.size(), (50,50),'incorrect default size')
#02
class WidgetResizeTestCase(SimpleWidgetTestCase):def runTest(self):self.widget.resize(100,150)self.assertEqual(self.widget.size(), (100,150),'wrong size after resize')

在写01 ,02 两个测试用例时候,我们继承了SimpleWidgetTestCase 这个类,在SimpleWidgetTestCase这个类中有setUp()方法,来帮我们自动的每次做好准备的工作。

类似的,有一个tearDown() 方法,来做每次测试后的清理工作。

这样的测试环境,在unittest中叫测试运行的fixture, 类似上下文。

但是如果这样的测试用例很多 ,SimpleWidgetTestCase 这个类就要被重载许多次,这很累,所以下面这个机制,可以省一点时间。就是把这些都写在一个类里面。

import unittestclass WidgetTestCase(unittest.TestCase):def setUp(self):self.widget = Widget('The widget')def tearDown(self):self.widget.dispose()self.widget = Nonedef test_default_size(self):self.assertEqual(self.widget.size(), (50,50),'incorrect default size')def test_resize(self):self.widget.resize(100,150)self.assertEqual(self.widget.size(), (100,150),'wrong size after resize')

这里我们没有提供runTest() 的方法,没关系,实例会运行每个test_*()的方法。所以只要名字写的规范就可以了。

跳过测试用例,使用装饰器@unittest.skip(),如下:

class MyTestCase(unittest.TestCase):@unittest.skip("demonstrating skipping")def test_nothing(self):self.fail("shouldn't happen")@unittest.skipIf(mylib.__version__ < (1, 3),"not supported in this library version")def test_format(self):# Tests that work for only a certain version of the library.pass@unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")def test_windows_support(self):# windows specific testing codepass

也可以跳过整个类。

这篇关于Python单元测试框架-unittest的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085436

相关文章

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho