Java 如何更改控制器中的字段以进行测试?

Java 如何更改控制器中的字段以进行测试?,java,spring-mvc,spring-boot,spring-mvc-test,Java,Spring Mvc,Spring Boot,Spring Mvc Test,我有下一个控制器: @EnableWebMvc @RequestMapping("experiences") @RestController("experience_controller") public class ExperienceController { @Autowired private ExperienceManager mExperienceManager; protected boolean mIsTest = false; //I need to

我有下一个控制器:

@EnableWebMvc
@RequestMapping("experiences")
@RestController("experience_controller")
public class ExperienceController {

    @Autowired
    private ExperienceManager mExperienceManager;

    protected boolean mIsTest = false; //I need to replace by 'true'

    @PostMapping(value = "new")
    public ResponseEntity<ExperienceModel> add(
            @RequestBody NewExperienceModel newExperience
    ) {
        if (!mIsTest) {
            ExperienceUtils.validate(newExperience);
        }

        Experience experience = newExperience.toExperience();

        if (!mExperienceManager.add(experience)) {
            throw new InternalServerException(ServerError.INTERNAL);
        }

        return new ResponseEntity<>(new ExperienceModel(experience),
                HttpStatus.CREATED);
    }
}
我需要在控制器中设置
mIsTest=true
。。。当然,我知道这个代码是错误的,但如何做到这一点呢?还是每次都需要手动更改?

使用@Value如何

public class ExperienceController {
    ...
    @Value("${flag.test:false}")
    protected boolean mIsTest;
    ...
}
和测试代码

...
@TestPropertySource(properties = {"flag.test = true"})
public class ExperienceControllerTest {
   ...
}
mIsTest的默认值为false,您可以使用property flag.test(或其他)更改mIsTest的值。可以使用属性文件和活动配置文件更改其值


如果您需要@Value的快速指南,请参阅此处:

您可以将
ExperienceUtils
更改为bean,并为测试注入一个模拟的bean。@DanW,谢谢!老实说,Imma noobie将在春季发布,但我将尝试了解如何编写自定义bean。对于您眼前的问题,有一个基于代码的即时解决方案,但想要将这样的转义填充代码放入生产系统中,有一种非常强烈的气味。
...
@TestPropertySource(properties = {"flag.test = true"})
public class ExperienceControllerTest {
   ...
}