Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在spring boot应用程序中使用自定义注释测试rest控制器_Spring_Spring Boot_Junit_Mockito_Spring Boot Test - Fatal编程技术网

如何在spring boot应用程序中使用自定义注释测试rest控制器

如何在spring boot应用程序中使用自定义注释测试rest控制器,spring,spring-boot,junit,mockito,spring-boot-test,Spring,Spring Boot,Junit,Mockito,Spring Boot Test,我有如下定义 @GetMapping(value="") public ResponseEntity<JsonResponse> getLocations(@RequestHeader(value="id") String id, @LocationType @RequestParam(value="locationType" ) String P_STS_AREA_TYP) { ... return new ResponseEntity<>(resp

我有如下定义

 @GetMapping(value="")
public ResponseEntity<JsonResponse> getLocations(@RequestHeader(value="id") String id, @LocationType @RequestParam(value="locationType" ) String P_STS_AREA_TYP) {

    ...
    return new ResponseEntity<>(response,HttpStatus.OK);
}
它通过了验证,并且不像应用程序使用相同的位置类型查询参数正常运行时那样输入错误处理逻辑

测试类上使用的注释

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { something.class, something.class})
mockito作为mock框架

有人知道如何在Junit中使用自定义注释吗

@Plog,我的验证器定义

@Target({ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = LocationTypeValidator.class)
public @interface LocationType {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
public class LocationTypeValidator implements ConstraintValidator<LocationType, String> {

@Autowired
InputValidator inputValidator;
@Override
public void initialize(LocationType locationType) {

}

@Override
public boolean isValid(String locationType, ConstraintValidatorContext constraintValidatorContext) {
    return inputValidator.validateLocationType(locationType);
}
公共类LocationTypeValidator实现ConstraintValidator{
@自动连线
输入确认器输入确认器;
@凌驾
公共无效初始化(LocationType LocationType){
}
@凌驾
公共布尔值有效(字符串位置类型,ConstraintValidatorContext ConstraintValidatorContext){
返回inputValidator.validateLocationType(locationType);
}
}


我无法设置验证器,因为它没有实现验证器接口

您需要使您的自定义验证器可用于您的mockMvc实例。您应该能够通过自动连接Spring的LocalValidatoryFactoryBean来实现这一点

@Autowired
private LocalValidatorFactoryBean validator;

...

@Before
public void setUp() {
    mockMvc = MockMvcBuilders.standaloneSetup(myController)
                  .setValidator(validator).build()
}

你有什么错误吗?没有,只是没有验证我不能设置validator(validator),因为我实现为:LocationTypeValidator实现ConstraintValidatorAh哎呀,我的错。你用什么注释你的测试类?@RunWith(SpringJUnit4ClassRunner.class)@springbootest(class={something.class,something.class})我已经更新了我的答案。如果这不起作用,请查看。这与模拟约束验证器有关,但应该说明如何让mockMvc实例识别它。
@Autowired
private LocalValidatorFactoryBean validator;

...

@Before
public void setUp() {
    mockMvc = MockMvcBuilders.standaloneSetup(myController)
                  .setValidator(validator).build()
}