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

Python单元测试:Mock对象Ps属性设置无效,函数返回空集合求助

问题排查与修复方案

核心错误点

  • 测试方法不符合unittest规范:方法名未遵循test_开头的规则,且错误地将TestCase作为参数传入方法,正确做法是让测试类继承unittest.TestCase。另外你误用了@patch装饰器,后续还直接覆盖了mock_input变量,完全浪费了patch的作用。
  • Mock属性设置错误:原函数中input.Ps是一个属性(不是可调用方法),但你用了给方法设置返回值的mock_input.Ps.return_value写法,属性应该直接赋值。
  • 其他细节问题:import my_func应放在文件顶部而非方法内部;Python3中集合字面量推荐用{'name1', 'name2'}而非set(['name1', 'name2'])。

修复后的测试代码

import unittest
from unittest.mock import MagicMock
from dataclasses import dataclass
# 替换为my_func实际所在的模块路径
from your_module import my_func

@dataclass
class TestClass:
    name: str

class TestMyFunc(unittest.TestCase):
    def test_my_func(self):
        mock_input = MagicMock()
        p1 = TestClass('name1')
        p2 = TestClass('name2')
        # 直接给Ps属性赋值,而非使用return_value
        mock_input.Ps = (p1, p2)
        expected_result = {'name1', 'name2'}

        self.assertEqual(my_func(mock_input), expected_result)

if __name__ == '__main__':
    unittest.main()

修复说明

  • 调整测试类与方法结构,符合unittest标准写法,确保测试框架能正确识别并执行测试。
  • 修正Mock属性赋值逻辑:因为原函数直接访问input.Ps属性,所以直接给mock_input.Ps赋值即可,return_value仅用于模拟可调用方法的返回值。
  • 移除无用的@patch装饰器,此处不需要patch外部模块,直接创建MagicMock对象即可满足测试需求。

内容的提问来源于stack exchange,提问作者Lily Jinjia Li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:18:08