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

Python单元测试中装饰器未执行问题求助

问题原因及解决方法

问题出在装饰器返回的内层函数没有保留原测试方法的元数据,导致unittest框架无法识别它是一个测试方法,根本没执行这个装饰后的方法,自然不会抛出异常,测试就直接通过了。

unittest是通过方法名以test_开头来识别测试方法的,但你写的装饰器返回的wrapped函数默认会把自己的名称设为wrapped,覆盖了原方法的test_01_client_init名称,框架扫描时会忽略这个方法,相当于这个测试根本没运行。

解决办法

用functools.wraps装饰内层的wrapped函数,它会把原函数的名称、文档字符串等元数据复制到内层函数上,让unittest能正确识别出这是一个测试方法。

修改后的代码示例:

import functools
import unittest

def work_please(func):
    @functools.wraps(func)  # 关键:保留原函数元数据
    def wrapped(*args, **kwargs):
        raise Exception('in work please decorator')
    return wrapped

class YourTestCase(unittest.TestCase):
    @work_please  
    def test_01_client_init(self):
        self._mock_start_server.assert_called()

运行修改后的代码,装饰器的内层逻辑就会被执行,抛出异常导致测试失败,符合预期。

如果是带参数的装饰器,同样要在最内层的执行函数上加上@functools.wraps(func),确保元数据不丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:00:53