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

测试函数执行完成后类中被修改的变量是否会被重置?

问题解答

类变量默认不会跨测试自动重置

默认情况下,执行第二个测试函数时a.something不会被自动重置。
类变量是绑定在类对象本身的存储区域,不属于单个测试实例,只要当前进程中该类没有被卸载重建,第一个测试对它的修改就会一直保留到后续测试执行,很容易造成测试用例之间的污染,导致结果不符合预期。

清除类变量、避免测试污染的常用方法

  • 利用测试框架的前置/后置钩子
    绝大多数单元测试框架都支持用例执行前后的钩子函数(比如pytest的teardown_function/setup_function,JUnit的@After注解),你可以在后置钩子中手动重置类变量:
    # pytest场景示例
    def teardown_method(self):
        # 重置为初始值
        a.something = 初始默认值
        # 也可以直接删除属性,下次调用时会走类的默认定义逻辑
        if hasattr(a, 'something'):
            delattr(a, 'something')
    
  • 卸载类后重新导入
    如果修改的类变量数量较多,可以在测试结束后把整个类从模块命名空间中删除,下一次导入时会重新加载初始状态的类:
    import sys
    # 移除已加载的模块
    del sys.modules['类所在的模块名']
    # 重新导入获得初始状态的类
    from 类所在的模块名 import a
    
  • 优先用实例变量替代类变量
    如果业务场景允许,尽量把需要修改的属性定义为实例变量而非类变量,测试框架默认会为每个测试用例新建独立的实例,实例变量会自动重建,不会出现跨用例污染的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:21:01