当前位置: 首页 > news >正文

【Python】单元测试unittest框架

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.lryc.cn/news/299609.html

相关文章:

  • (三十七)大数据实战——Solr服务的部署安装
  • 在Ubuntu22.04上部署FoooCUS2.1
  • 详解C语言中的野指针和assert断言
  • Vue源码系列讲解——模板编译篇【四】(文本解析器)
  • 微信小程序开发学习笔记《17》uni-app框架-tabBar
  • 《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)
  • 【芯片设计- RTL 数字逻辑设计入门 15 -- 函数实现数据大小端转换】
  • Codeforces Round 925 (Div. 3) D. Divisible Pairs (Java)
  • 【C语言】实现单链表
  • Hive调优——合并小文件
  • 设计模式(行为型模式)责任链模式
  • HTTP和HTTPS区别!
  • 麻将普通胡牌算法(带混)
  • Rust结构体详解:定义、使用及方法
  • LeetCode、435. 无重叠区间【中等,贪心 区间问题】
  • 【实战】一、Jest 前端自动化测试框架基础入门(三) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(三)
  • 信息学奥赛一本通1228:书架
  • 红队打靶练习:GLASGOW SMILE: 1.1
  • 网络安全的今年:量子、生成人工智能以及 LLM 和密码
  • 【FPGA】Verilog:奇偶校验位发生器 | 奇偶校验位校验器
  • 【心得】关于STM32中RTC的校准方法
  • 消息中间件面试篇
  • 【MySQL】-20 MySQL综合-6(MySQL创建数据表+MySQL修改数据表+MySQL删除数据表)
  • linux查看当前连接的IP
  • 洛谷_P1923 【深基9.例4】求第 k 小的数_python写法
  • 【MySQL】学习约束和使用图形化界面创建表
  • QGIS编译(跨平台编译)之四十八:pixman编译(Windows、Linux、MacOS环境下编译)
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:441-460)
  • 【sass】 中使用 /deep/ 修改 elementUI 组件样式报错
  • Python算法题集_排序链表