You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在参数化测试列表中添加待Mock的函数?——实现不同测试用例Mock不同函数的技术问询

解决方案:参数化测试中动态Mock不同函数

当然可以实现你的需求!不需要拆分两个独立测试用例,只需要把要Mock的目标函数路径加入参数化列表,再用unittest.mock.patch的上下文管理器动态处理每个用例的Mock即可。

修改后的测试代码

from parameterized import parameterized
from unittest.mock import patch
from your_module import do_something  # 导入你的业务函数

class TestYourFunction(unittest.TestCase):
    @parameterized.expand([
        ('name1', 1, 2, 'functions.function1'),  # 第一个用例Mock function1
        ('name2', 2, 2, 'functions.function2')   # 第二个用例Mock function2
    ])
    def test_data(self, _, input_val, expected_output, mock_target):
        # 动态Mock当前用例指定的目标函数
        with patch(mock_target) as mock_func:
            # given:设置Mock返回值
            mock_func.return_value = input_val
            # when:执行业务逻辑
            output = do_something()
            # then:断言结果
            self.assertEqual(output.count(), expected_output)

关键说明

  • 参数化扩展:在测试用例列表中新增了mock_target字段,用来指定当前用例需要Mock的函数路径(注意这个路径必须和do_something()中实际调用function1/function2的导入路径一致,否则Mock不会生效)。
  • 动态Mock:放弃了装饰器形式的@patch,改用上下文管理器with patch(...),这样就能根据参数化传入的mock_target动态切换Mock对象。
  • 保持代码简洁:所有测试逻辑复用同一个测试方法,避免了重复代码,同时满足不同用例Mock不同函数的需求。

内容的提问来源于stack exchange,提问作者herder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:55:13