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 {
...
}