【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.mzph.cn/news/681828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教程】Kotlin语言学习笔记(一)——认识Kotlin(持续更新)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 文章目录 【Kotlin语言学习】系列文章一、Kotlin介绍二、学习路径 一、…

Leetcode 1035 不相交的线

题意理解: 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足: nums1[i] nums2[j]且绘制的直线不与任何其他连线&#xff…

面向对象2:继承

目录 2.1继承 2.2 继承的好处 2.3 权限修饰符 2.4 单继承、Object 2.5 方法重写 2.6 子类中访问成员的特点 2.7 子类中访问构造器的特点 面向对象1:静态 2.1继承 向对象编程之所以能够能够被广大开发者认可,有一个非常重要的原因,是…

1921:【02NOIP普及组】过河卒

1921:【02NOIP普及组】过河卒 【题目描述】 如图,A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。 同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有…

联合体与枚举

联合体与枚举 联合体枚举问题 联合体 联合体也是由一个或多个成员构成的数据类型,它最大的特点是只为最大的一个成员开辟空间,其他成员共用这个空间,这个东西也叫共用体!!! union Un {char c;int i; };int main() {union Un un { 0 };un.c 0x01;//先为最大的成员开辟空间un.…

开源免费的Linux服务器管理面板分享

开源免费的Linux服务器管理面板分享 一、1Panel1.1 1Panel 简介1.2 1Panel特点1.3 1Panel面板首页1.4 1Panel使用体验 二、webmin2.1 webmin简介2.2 webmin特点2.3 webmin首页2.4 webmin使用体验 三、Cockpit3.1 Cockpit简介3.2 Cockpit特点3.3 Cockpit首页3.4 Cockpit使用体验…

Ajax 入门

Ajax 入门 简介 AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网…

C++ //练习 6.10 编写一个函数,使用指针形参交换两个整数的值。在代码中调用该函数并输出交换后的结果,以此验证函数的正确性。

C Primer(第5版) 练习 6.10 练习 6.10 编写一个函数,使用指针形参交换两个整数的值。在代码中调用该函数并输出交换后的结果,以此验证函数的正确性。 环境:Linux Ubuntu(云服务器) 工具&…

酒店押金预授权怎么开通?微信酒店押金+房态+门锁关联 +电子押金单 解决方案

一、酒店押金管理有哪些? 1.渠道有银行预授权 2.微信押金支付 3.酒店押金系统 4.支付押金管理 二、银行预授权模式 酒店押金预授权通常是在客人办理入住时进行的,酒店会要求客人提供信用卡或借记卡的卡号、有效期、持卡人姓名等信息,然后…

第3讲 小程序TabBar搭建

tabBar,底部三个tab,对应三个页面,创建投票,关于锋哥,我的。 新建三个页面 pages.json 页面定义 "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/col…

什么是涌现行为?

涌现行为指的是在个体间的相互作用过程中,由于个体间的简单规则和行为产生的复杂且不可预测的现象。这种现象通常出现在群体中,而不是单独的个体中。涌现行为具有一定的自发性和不可预测性,因为它是由许多个体的简单行为相互作用而产生的。 一…

蓝桥杯嵌入式第11届真题(完成) STM32G431

蓝桥杯嵌入式第11届真题(完成) STM32G431 题目 代码 程序和之前的大同小异,不过多解释 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief :…

C++重新入门-基本输入输出

C 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这…

如何计算非线性相关系数

Python中没有提供计算两组变量非线性相关系数的包或接口。x和x^2的皮尔森相关系数可能接近于0,因为求的是线性相关性。但是这两个变量并不是独立不相关的。使用距离相关系数就可以计算x和x^2的非线性关系,如果距离相关系数接近于0,就可以说两…

AtCoder Beginner Contest 340 C - Divide and Divide【打表推公式】

原题链接:https://atcoder.jp/contests/abc340/tasks/abc340_c Time Limit: 2 sec / Memory Limit: 1024 MB Score: 300 points 问题陈述 黑板上写着一个整数 N。 高桥将重复下面的一系列操作,直到所有不小于2的整数都从黑板上移除: 选择…

二、DataX安装

DataX安装 一、简介二、系统要求三、部署 一、简介 官方地址:https://github.com/alibaba/DataX/blob/master/userGuid.md 二、系统要求 LinuxJDK(1.8以上,推荐1.8) Centos7.9的java1.8安装命令:yum install java-1.8.0-openjdk.x86_64 Py…

Git分支和迭代流程

Git分支 feature分支:功能分支 dev分支:开发分支 test分支:测试分支 master分支:生产环境分支 hotfix分支:bug修复分支。从master拉取,修复并测试完成merge回master和dev。 某些团队可能还会有 reale…

2024/2/13

数组练习 1、选择题 1.1、若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a 数组的第10个元素是 D A)a[0][4] B) a[1][3] C)a[0][3] D)a[1][4] 1.2、有数组 int a[5] {10,20,30,40&…

孙悟空吃蟠桃 - 华为OD统一考试

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵蟠桃树,每棵树上都桃子,守卫将在 H 小时后回来。 孙悟空…

华为数通方向HCIP-DataCom H12-821题库(单选题:441-460)

第441题 下面是一台路由输出的信息,关于这段信息描述正确的是 <R1>display bgp peerBGP local router ID : 2.2.2.2Local AS number : 100Total number of peers : 2 Peers in established state : 0Peer V AS MsgRcvd MsgSent OutQ Up/Down …