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
相关产品推荐
相关产品推荐

