反射 - 在控制器弹簧中设置私有字段

AJJ*_*AJJ 5 java reflection spring-mvc

我使用 Spring MVC。

我的控制器中有一个私有字段。此字段的值来自属性文件,因为,

@Controller
public Class MainController() {

   @Value("${my-value}")
   private int myValue;

}
Run Code Online (Sandbox Code Playgroud)

我必须覆盖硒测试中的值。如何覆盖此字段的值,这意味着我想设置自定义值(以便不从属性文件中获取该值)?

能不能这样

ReflectionTestUtils.setField(MainController.class, "myValue", 3, Integer.class);
Run Code Online (Sandbox Code Playgroud)

小智 0

您应该将此代码放入控制器测试方法中。

@WebMvcTest(controllers = MainController.class, useDefaultFilters = false)
@Import({MainController.class})
public void MainControllerTest{
    @Autowired
    private MainController mainController

    @Test
    should_set_controller_private_field(){
        ReflectionTestUtils.setField(mainController, "myValue", 3)
        assertEquals(ReflectionTestUtils.getField(
            mainController, "myValue"), 3)
    }
}
Run Code Online (Sandbox Code Playgroud)