【Python】单元测试unittest框架

news/2025/3/13 20:06:00/

note

  • 使用unittest框架进行单元测试是Python标准库的一部分,提供了编写测试用例、测试套件以及运行测试的能力。
  • 测试用例是继承自unittest.TestCase的类。在这个类中,你可以定义一系列的方法来测试不同的行为。每个测试方法都应该以test开头。

文章目录

  • note
  • 一、单元测试unittest框架
    • 1. 直接来看一个简单的测试用例
    • 2. 相关断言方法的使用:
    • 3. 运行测试
    • 4. 测试套件和测试运行器
  • 二、一个完整的例子
  • Reference

一、单元测试unittest框架

1. 直接来看一个简单的测试用例

  • 使用unittest框架进行单元测试是Python标准库的一部分,提供了编写测试用例、测试套件以及运行测试的能力。
  • 测试用例是继承自unittest.TestCase的类。在这个类中,你可以定义一系列的方法来测试不同的行为。每个测试方法都应该以test开头。下面代码是一个简单的测试用例
# test-单元测试
import unittest# 子类必须继承unittest.TestCase类
class TestMethod(unittest.TestCase):# 每个测试方法都需要以test开头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 = "happy new year"self.assertEqual(s.split(), ['happy', 'new', 'year'])with self.assertRaises(TypeError):s.split(3)if __name__ == '__main__':unittest.main()

2. 相关断言方法的使用:

  • 使用assertEqual(a, b)来检查ab是否相等。
  • 使用assertTrue(x)assertFalse(x)来验证x是否为真或假。
  • 使用assertRaises(Error, func, *args, **kwargs)来验证是否抛出了期望的异常。比如上面的代码例子,s.split()方法的参数应该是一个字符串,然后传入了3数字所以预期该调用会抛出TypeError异常

3. 运行测试

可以通过以下2种方式运行测试:

  • a. 命令行运行

如果你的测试代码保存在test.py文件中,可以直接在命令行中运行:

python -m unittest test

这会自动发现所有以test开头的方法并运行它们。

  • b. 在代码中运行

如果你想在代码中直接运行测试,可以在文件的最后加上:

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

4. 测试套件和测试运行器

对于更复杂的测试需求,可以使用unittest.TestSuite来组合多个测试用例,然后用unittest.TextTestRunner来运行这些测试。

def suite():suite = unittest.TestSuite()suite.addTest(TestStringMethods('test_upper'))suite.addTest(TestStringMethods('test_isupper'))return suiteif __name__ == '__main__':runner = unittest.TextTestRunner()runner.run(suite())

unittest框架提供了丰富的断言方法和测试组织方式,帮助开发者构建可靠和可维护的测试套件。通过这种方式,可以有效地进行单元测试,确保代码的质量和稳定性。

二、一个完整的例子

这里引用大模型数据处理库data_juicer的一个栗子,PerplexityFilter是根据计算微调数据的困惑度进行筛选sft数据:

import unittest
from datasets import Dataset
from data_juicer.ops.filter.perplexity_filter import PerplexityFilter
from data_juicer.utils.constant import Fieldsclass PerplexityFilterTest(unittest.TestCase):def _run_perplexity_filter(self, dataset: Dataset, target_list, op):if Fields.stats not in dataset.features:# TODO:# this is a temp solution,# only add stats when calling filter opdataset = dataset.add_column(name=Fields.stats,column=[{}] * dataset.num_rows)dataset = dataset.map(op.compute_stats)dataset = dataset.filter(op.process)dataset = dataset.select_columns(column_names=['text'])res_list = dataset.to_list()self.assertEqual(res_list, target_list)def test_en_case(self):ds_list = [{'text': "Today is Sunday and it's a happy day!"}, {'text':"Today is Sund Sund Sund Sund Sunda and it's a happy day!"}, {'text': 'a v s e c s f e f g a qkc'}, {'text': ',。、„”“«»1」「《》´∶:?!();–—.~’…━〈〉【】%►'}, {'text': 'Do you need a cup of coffee?'}, {'text': 'emoji表情测试下😊,😸31231'}]tgt_list = [{'text': "Today is Sunday and it's a happy day!"}, {'text': 'Do you need a cup of coffee?'}]dataset = Dataset.from_list(ds_list)op = PerplexityFilter(lang='en', max_ppl=900)self._run_perplexity_filter(dataset, tgt_list, op)if __name__ == '__main__':unittest.main()

Reference

[1] python中unittest库 python的unittest框架
[2] https://docs.python.org/zh-cn/3.11/library/unittest.html


http://www.ppmy.cn/news/1350374.html

相关文章

华为配置车地通信快速切换实验

配置车地通信快速切换示例 组网图形 图1 配置车地通信快速切换业务示意图 组网需求配置思路配置注意事项操作步骤配置文件 组网需求 某轨交企业为了降低网络部署成本,提升服务质量,希望通过WLAN技术实现车地通信,使部署在地面网络的组播服务器…

已解决org.springframework.web.HttpMediaTypeNotAcceptableException异常的正确解决方法,亲测有效!!!

已解决org.springframework.web.HttpMediaTypeNotAcceptableException异常的正确解决方法,亲测有效!!! 文章目录 问题分析 报错原因 解决思路 解决方法 总结 问题分析 在Spring MVC应用中处理HTTP请求时,我们有…

JavaI/O流 File类(文件)

目录 File类实例 File类 Java的File类是java.io.File的一个类,它表示文件或目录的路径名。这个类在处理文件和目录时非常有用,它提供了很多静态方法来操作文件和目录。 以下是一些File类的常见方法: 构造方法:创建表示文件或目…

洛谷: P1308 [NOIP2011 普及组] 统计单词数

前言: 这道题没理解清题目表达意思,我开始想的是用map来记录个数,然后一个变量记录一开始出现的单词位置,不挺简单的吗,然后....就AC了2个..从错误提示能看到个数没啥问题,但是第一个单词位置不对,看了新样…

【原创 附源码】Flutter安卓及iOS海外登录--Google登录最详细流程

最近接触了几个海外登录的平台,踩了很多坑,也总结了很多东西,决定记录下来给路过的兄弟坐个参考,也留着以后留着回顾。更新时间为2024年2月8日,后续集成方式可能会有变动,所以目前的集成流程仅供参考&#…

三、案例 - MySQL数据迁移至ClickHouse

MySQL数据迁移至ClickHouse 一、生成测试数据表和数据1.在MySQL创建数据表和数据2.在ClickHouse创建数据表 二、生成模板文件1.模板文件内容2.模板文件参数详解2.1 全局设置2.2 数据读取(Reader)2.3 数据写入(Writer)2.4 性能设置…

15 ABC基于状态机的按键消抖原理与状态转移图

1. 基于状态机的按键消抖 1.1 什么是按键? 从按键结构图10-1可知,按键按下时,接点(端子)与导线接通,松开时,由于弹簧的反作用力,接点(端子)与导线断开。 从…

Linux操作系统基础(三):虚拟机与Linux系统安装

文章目录 虚拟机与Linux系统安装 一、系统的安装方式 二、虚拟机概念 三、虚拟机的安装 四、Linux系统安装 1、解压人工智能虚拟机 2、找到解压目录中的node1.vmx 3、启动操作系统 虚拟机与Linux系统安装 一、系统的安装方式 Linux操作系统也有两种安装方式&#xf…