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

JUnit是否会为每个测试重置全局变量?Spring测试实例解惑

为什么每个测试方法执行时obj会自动重置?

你的测试代码如下:

@ExtendWith(SpringExtension::class)
@WebMvcTest(Controller::class)
class ScheduleControllerTest(@Autowired val mockMvc: MockMvc) {
   val obj = object {
       var b = 2
   }

   @Test
   fun a(){
       obj.b = 1
       assertEquals(obj.b, 1)
   }

   @Test
   fun b(){
       assertEquals(obj.b, 2)
       
   }
}

核心原因是JUnit 5(搭配SpringExtension)默认会为每个测试方法创建一个独立的测试类实例,具体表现为:

  • obj是测试类的成员变量,每运行一个测试方法,JUnit就会新建一个ScheduleControllerTest对象
  • 每个新实例中的obj都会重新完成初始化,b的初始值始终是2
  • 测试方法a修改的是当前实例里obj的b值,完全不会影响测试方法b对应的新实例中的obj

因此两个测试方法互相独立,不需要额外用@Before重置,test b里的obj.b天然就是初始值2,测试自然通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:15:53