python unittest高级特性!

news2024/9/21 12:23:40

1. 测试套件 (Test Suites)

测试套件允许你组合多个测试用例,并且能够以不同的方式组织和运行这些测试。这是对测试进行分组和控制测试执行顺序的有效手段。

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())if __name__ == '__main__':    suite = unittest.TestSuite()    suite.addTest(TestStringMethods('test_upper'))    suite.addTest(TestStringMethods('test_isupper'))    runner = unittest.TextTestRunner()    runner.run(suite)

图片

2. 装饰器 (Decorators)

unittest 提供了几个装饰器来控制测试行为,比如 skip 和 expectedFailure。、

import unittestclass TestDecorators(unittest.TestCase):    @unittest.skip("demonstrating skipping")    def test_nothing(self):        self.fail("shouldn't happen")    @unittest.expectedFailure    def test_fail(self):        self.assertEqual(1, 0, "broken")if __name__ == '__main__':    unittest.main()

图片

3. 参数化测试 (Parameterized Tests)

通过 parameterized 库,你可以为同一个测试方法提供不同的输入数据,从而避免重复编写相似的测试代码。

安装 parameterized 库

pip install parameterized
import unittestfrom parameterized import parameterizedclass TestMath(unittest.TestCase):    @parameterized.expand([        (2, 3, 5),        (7, 6, 13),        (-1, 1, 0)    ])    def test_add(self, a, b, expected):        self.assertEqual(a + b, expected)if __name__ == '__main__':    unittest.main()

图片

4. 嵌套测试 (Nested Tests)

虽然 unittest 不直接支持嵌套测试,但可以通过子类化来实现类似的功能。

import unittestclass TestNested(unittest.TestCase):    class TestSub(unittest.TestCase):        def test_subtest(self):            self.assertEqual(1 + 1, 2)    def test_nested(self):        suite = unittest.TestLoader().loadTestsFromTestCase(self.TestSub)        result = unittest.TextTestRunner(verbosity=2).run(suite)        self.assertTrue(result.wasSuccessful())if __name__ == '__main__':    unittest.main()

图片

5. 动态生成测试 (Dynamic Test Generation)

你可以动态创建测试用例,这在某些情况下非常有用,比如当测试依赖于外部数据源时。

import unittestdef load_tests(loader, tests, pattern):    suite = unittest.TestSuite()    for i in range(1, 4):        suite.addTest(MyTest('test_method', i))    return suiteclass MyTest(unittest.TestCase):    def __init__(self, methodName, data):        super().__init__(methodName)        self.data = data    def test_method(self):        self.assertEqual(self.data % 2, 0)if __name__ == '__main__':    unittest.main()

图片

6. 测试加载器 (Test Loaders)

unittest 提供了多种测试加载器,用于自动发现和加载测试用例。

import unittestclass TestLoaders(unittest.TestCase):    def test_one(self):        self.assertEqual(1 + 1, 2)if __name__ == '__main__':    loader = unittest.TestLoader()    suite = loader.loadTestsFromTestCase(TestLoaders)    unittest.TextTestRunner().run(suite)

图片

7. 捕获异常 (AssertRaises)

unittest 提供了 assertRaises 方法来检查一个函数是否抛出了预期的异常。、

import unittestclass TestExceptions(unittest.TestCase):    def test_divide_by_zero(self):        with self.assertRaises(ZeroDivisionError):            1 / 0if __name__ == '__main__':    unittest.main()

图片

8. 子测试 (Subtests)

子测试允许你在一个测试方法中执行多个断言,并确保即使其中一个失败也不会中断其他断言的执行。、

import unittestclass TestSubtests(unittest.TestCase):    def test_subtest(self):        for value in [2, 4, 6]:            with self.subTest(i=value):                self.assertEqual(value % 2, 0)if __name__ == '__main__':    unittest.main()

图片

9. 设置和清理 (Setup and Teardown)

unittest 提供了 setUp 和 tearDown 方法,用于在每个测试方法前后执行初始化和清理工作。此外,还可以使用 setUpClass 和 tearDownClass 方法来处理整个测试类的初始化和清理工作。

import unittestimport tempfileclass TestFileOperations(unittest.TestCase):    @classmethod    def setUpClass(cls):        cls.temp_dir = tempfile.TemporaryDirectory()    @classmethod    def tearDownClass(cls):        cls.temp_dir.cleanup()    def setUp(self):        self.filename = self.temp_dir.name + '/testfile.txt'        with open(self.filename, 'w') as f:            f.write('Hello, World!')    def tearDown(self):        try:            os.remove(self.filename)        except OSError:            pass    def test_file_content(self):        with open(self.filename, 'r') as f:            content = f.read()        self.assertEqual(content, 'Hello, World!')if __name__ == '__main__':    unittest.main()

图片

10. 断言方法 (Assertion Methods)

unittest 提供了一系列断言方法,它们比普通的 assert 更强大并且提供了更好的错误消息。例如,assertEqual, assertTrue, assertFalse, assertIn, assertNotIn, assertRaises, 等等。

import unittestclass TestAsserts(unittest.TestCase):    def test_assert_equal(self):        self.assertEqual(1 + 1, 2)    def test_assert_true(self):        self.assertTrue(1 == 1)    def test_assert_false(self):        self.assertFalse(1 == 2)    def test_assert_in(self):        self.assertIn('a', 'abc')    def test_assert_not_in(self):        self.assertNotIn('z', 'abc')if __name__ == '__main__':    unittest.main()

图片

11. 忽略测试 (Skipping Tests)

有时你需要有条件地跳过某个测试。unittest 提供了 skipIf 和 skipUnless 装饰器,使得可以根据条件跳过测试。

import unittestimport sysclass TestSkipConditions(unittest.TestCase):    @unittest.skipIf(sys.version_info < (3, 8), "requires Python 3.8 or higher")    def test_python_version(self):        self.assertGreaterEqual(sys.version_info, (3, 8))if __name__ == '__main__':    unittest.main()

图片

12. 捕获输出 (Capturing Output)

有时候你需要捕获测试过程中的标准输出(stdout)或标准错误(stderr)。unittest 的 capture_output 上下文管理器可以帮助完成这项任务。

import unittestfrom io import StringIOclass TestOutputCapture(unittest.TestCase):    def test_captured_output(self):        with self.assertLogs() as cm:            print("This is a test message.")        self.assertIn("This is a test message.", cm.output[0])if __name__ == '__main__':    unittest.main()

图片

13. 异步测试 (Async Tests)

对于异步代码,可以使用 unittest.IsolatedAsyncioTestCase 来编写异步测试。

import asyncioimport unittestclass TestAsyncMethods(unittest.IsolatedAsyncioTestCase):    async def test_async_method(self):        result = await self.async_method()        self.assertEqual(result, 'expected_result')    async def async_method(self):        await asyncio.sleep(0.1)        return 'expected_result'if __name__ == '__main__':    unittest.main()

图片

14. 自定义断言 (Custom Assertions)

你可以扩展 unittest.TestCase 类来自定义新的断言方法。

import unittestclass CustomAsserts(unittest.TestCase):    def assertIsNone(self, obj, msg=None):        if obj is not None:            standardMsg = '%s is not None' % str(obj)            self.fail(self._formatMessage(msg, standardMsg))    def test_custom_assertion(self):        self.assertIsNone(None)if __name__ == '__main__':    unittest.main()

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2043688.html

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

相关文章

C语言生成常见波形数据

最近无聊&#xff0c;研究上C语言的一些程序&#xff0c;感觉波形生成还是挺有用的 这里主要生成了正弦&#xff0c;方波&#xff0c;三角波 &#xff0c;锯齿波&#xff0c;指数波形等 首先看看效果&#xff0c; 这里把生成的数据用python画了出来&#xff0c;程序在最后 …

适合母亲节的SVG模版

宝藏模版 往期推荐&#xff08;点击阅读&#xff09;&#xff1a; 趣味效果&#xff5c;高大上&#xff5c;可爱风&#xff5c;年终总结&#xff08;一&#xff09;&#xff5c;年终总结&#xff08;二&#xff09;&#xff5c;循环特效&#xff5c;情人节&#xff08;一&…

[Datawhale AI 夏令营]多模态大模型数据合成赛事-Task2

简单按照datawhale给的task2的文档学习了一下,主要还是学习了Data-Juicer相关的知识。 1.Data-juicer 初探 简单理解一下&#xff0c;Data juicer就是提供给你许多数据处理方法&#xff0c;包括Formatter、Mapper、Filter、Deduplicator和Selector&#xff0c;涉及图像、文本、…

73、 dockerfile

一、dockerfile 自定义镜像---------通过docker创建镜像。 1.1、创建镜像的方式&#xff1a; 1、dockerfile最基的方式&#xff0c;最常用的方式。 2、docker pull 拉取的是最基础的镜像&#xff0c;只有基础功能&#xff0c;没有定制化的功能。 3、基于基础镜像&#xff…

每天五分钟计算机视觉:人脸识别如何解决一次学习的问题?

本文重点 人脸识别技术作为当前计算机技术的重要分支,广泛应用于公共安全、智能家居、金融商业等多个领域。然而,尽管该技术取得了显著进展,但在实际应用中仍面临诸多挑战,其中一次学习问题(One-Shot Learning Problem)尤为突出。 一次学习问题的定义 我们人类是具有快…

单元训练01:LED指示灯的基本控制

蓝桥杯 小蜜蜂 单元训练01&#xff1a;LED指示灯的基本控制 #include "stc15f2k60s2.h" #include <intrins.h>#define LED(x) \{ \P2 P2 & 0x1f | 0x80; \P0 x; \P2 & 0x1f; \}…

用Python实现9大回归算法详解——04. 多项式回归算法

多项式回归 是线性回归的一种扩展&#xff0c;它通过将输入特征的多项式项&#xff08;如平方、立方等&#xff09;引入模型中&#xff0c;以捕捉数据中非线性的关系。虽然多项式回归属于线性模型的范畴&#xff0c;但它通过增加特征的多项式形式&#xff0c;使得模型能够拟合非…

python-NLP:4句法分析

文章目录 句法分析概述句法分析分类句法分析任务 句法结构分析基本概念语法形式化基本方法 依存句法分析浅层句法分析 句法分析概述 句法分析(syntacticparsing)是自然语言处理中的关键技术之一&#xff0c;其基本任务是确定句子的句法结构(syntactic structure)或句子中词汇之…

华三超融合服务器硬件监控指标解读

随着信息技术的快速发展&#xff0c;超融合服务器因其高效、灵活的特点&#xff0c;在企业IT架构中扮演着越来越重要的a角色。华三&#xff08;H3C&#xff09;作为业界知名的网络设备供应商&#xff0c;其超融合服务器产品在市场上广受欢迎。 为了确保这些服务器的稳定运行&am…

asp.net core 调用wps实现word转pdf

安装wps https://www.wps.cn/ 创建.net core控制项目 添加com引用&#xff0c;搜索wps 准备word&#xff0c;名字叫001.docx word转pdf 编写代码 namespace WPSStu01 {internal class Program{static void Main(string[] args){Console.WriteLine("转化开始&q…

JAVA maven pom下载失败问题处理

如果直接在IDEA编辑器中中下载pom依赖 下载失败,可以直接去官网下载jar依赖包(也可以用其他方式,比如找同事拷贝等最终目的是本地需要这个包) 官网点击地址跳转 搜索你需要的包点击进入下载界面 选择对应的版本进行下载 () 下载界面中有对应的当前包的pom坐标个当前jar包 坐…

163邮箱注销后不能再注册

网易邮箱注销后不能再注册 一个手机号只能注册15个163邮箱 再注册会报异常 申请注销邮箱要等15天&#xff0c;才是永久注销 永久注销邮箱后&#xff0c;在拿这个手机号注册新邮箱&#xff0c;还是不行

尊享奢睡新境界:康姿百德柔压磁性枕匠心设计引领品质睡眠革命

重塑睡眠艺术&#xff1a;揭秘康姿百德豪华磁性枕&#xff0c;个性化支撑与卓越透气性的完美融合 在现代家居生活中&#xff0c;细节往往决定了整体的品质。而在睡眠方面&#xff0c;一款好的枕头能够改变我们的睡眠体验。康姿百德柔压磁性枕&#xff08;豪华款&#xff09;正…

Anaconda使用

查看conda版本&#xff1a; conda -V查看支持的cuda版本&#xff1a; nvidia -smi 输出为&#xff1a; Mon Aug 12 12:35:26 2024 ----------------------------------------------------------------------------- | NVIDIA-SMI 528.92 Driver Version: 528.…

string详解(2)— 模拟实现

1.经典的string类实现 最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。 (1) String.h 为了与库里的string进行区分我们使用String&#xff1a; // String.h#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<stri…

在linux上架设Web服务器Apache(Ubuntu)

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力! 江山如画&#xff0c;客心如若&#xff0c;欢迎到访&#xff0c;一展风采 文章目录 背景1. 安装 Apache2. 启动和检查 Apache 服务…

计算机的错误计算(六十三)

摘要 计算机的错误计算&#xff08;五十六&#xff09;探讨了大数的正切函数值的错误计算。本节讨论大数的余切函数的计算精度问题。 例1. 已知 计算 不妨用 3种方法计算。 (1) 在 Python 中利用 直接贴图&#xff1a; (2) 在 Java 中利用 若运行下列代码 import ja…

【Python快速入门和实践016】Python常用脚本-对视频抽取指定帧数并保存

一、功能介绍 这段代码的功能是从一个视频文件中抽取指定数量的帧&#xff0c;并将这些帧保存为图像文件。步骤如下&#xff1a; 设置路径和参数&#xff1a; video_path&#xff1a;视频文件的路径。image_folder&#xff1a;保存抽取图像的目录。num_frames_to_extract&#…

FL Studio21.2.4最新中文版免费下载汉化包破解补丁

&#x1f389; FL Studio 21中文版新功能全解析&#xff01;让你的音乐制作更加高效&#xff01; 嘿&#xff0c;各位音乐制作的小伙伴儿们&#xff0c;今天我要安利一款你们绝对会爱上的神器——FL Studio 21中文版&#xff01;这款软件不仅功能强大&#xff0c;而且操作简便…

【ARM】解析MDK生成的C Compiler list文件的具体内容

1、 文档目标 用于解析MDK生成的C Compiler list文件的具体内容。 2、 问题场景 在MDK的options窗口中的Listing栏中有生成对应的源文件的编译列表&#xff08;如图2-1&#xff09;。但是&#xff0c;对于这个生成的列表中包含什么具体的信息就不太清楚了。 图2-1 3、软硬件…