UnitTest 参数化---Parameterized安装

本文介绍了如何使用Parameterized在Python中进行pip安装,包括使用豆瓣镜像源,并展示了如何在unittest测试中利用`@parameterized.expand`实现参数化,减少重复操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Parameterized安装命令

常见安装:pip install parameterized
或使用国内豆瓣镜像源安装:pip install parameterized -i https://pypi.douban.com/simple

shell页面(安装页面cmd内)

C:\Users\S3214>pip install parameterized -i https://pypi.douban.com/simple
Looking in indexes: https://pypi.douban.com/simple
Requirement already satisfied: parameterized in c:\programs\python\python38\lib\site-packages (0.9.0)
WARNING: You are using pip version 19.2.3, however version 23.3.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

二、核心代码

@parameterized.expand()

Code

#参数化
# 下载pip install parameterized -i https://pypi.douban.com/simple
#  @parameterized.expand()
# 效果,减少重复操作
import unittest
# 导包错误不是import parameterized 而是 from parameterized import parameterized
from parameterized import parameterized
from mathfunc import add, minus, my_random

# 写测试用例(继承mathfunc中写好的函数)
class add_minus_test(unittest.TestCase):
    # 参数化---》减少重复操作()
    @parameterized.expand([(5,6,11),(2,-3,-1),(-3,-2,-5),(2,0,2)])
    def test_add(self,a,b,c):
        num = add(a, b)
        self.assertEqual(c, num)

效果图

在这里插入图片描述

### 实现 Python 单元测试中的参数化测试 在 Python 的 `unittest` 框架中,默认并不支持直接的参数化测试功能。然而,可以通过一些技巧来实现这一目标。以下是基于 `unittest` 和第三方库 `parameterized` 的两种方式。 #### 方法一:使用 `subTest()` 函数 `unittest` 自带的 `subTest()` 可用于简单的参数化测试场景: ```python import unittest class TestMathOperations(unittest.TestCase): def test_addition(self): test_cases = [ (1, 2, 3), # Case 1: Positive integers (-1, -2, -3), # Case 2: Negative integers (0, 0, 0), # Case 3: Zeros (1.5, 2.5, 4.0) # Case 4: Floats ] for a, b, expected in test_cases: with self.subTest(a=a, b=b, expected=expected): result = a + b self.assertEqual(result, expected) if __name__ == '__main__': unittest.main() ``` 上述代码展示了如何利用循环和 `subTest()` 来运行多个测试案例[^1]。 #### 方法二:借助外部库 `parameterized` 对于更复杂的参数化需求,推荐使用 `parameterized` 库。安装该库的方法如下: ```bash pip install parameterized ``` 下面是一个完整的例子: ```python from parameterized import parameterized import unittest class TestMathOperationsWithParameterized(unittest.TestCase): @parameterized.expand([ ("positive_integers", 1, 2, 3), ("negative_integers", -1, -2, -3), ("zeros", 0, 0, 0), ("float_numbers", 1.5, 2.5, 4.0) ]) def test_addition(self, name, a, b, expected): """测试加法操作""" result = a + b self.assertEqual(result, expected) if __name__ == '__main__': unittest.main() ``` 此方法允许开发者通过装饰器的方式定义多组输入数据及其对应的期望输出,从而简化了测试用例的设计过程。 #### 结合断言增强测试效果 无论采用哪种方式进行参数化测试,在实际应用过程中都应充分运用各种类型的断言语句来验证程序行为是否符合预期。例如,除了常用的 `assertEqual` 外,还可以根据具体业务逻辑选用其他更适合的断言语句,比如 `assertTrue`, `assertFalse`, 或者针对集合成员关系判断的 `assertIn` 等[^4]。 --- ### 总结 以上介绍了两种主流的在 Python 中实施单元测试参数化的技术方案——一种依赖于标准库自带的功能;另一种则引入专门设计的支持工具。这两种途径各有优劣,可根据项目实际情况灵活选取适用策略[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值