У меня есть следующий контроллер:
@RestController
@RequestMapping(value = ROOT_MAPPING)
public class GatewayController
{
@Autowired
private RequestValidator requestValidator;
@InitBinder
protected void initBinder(WebDataBinder binder)
{
binder.addValidators(requestValidator);
}
@PostMapping(value = REDIRECT_MAPPING)
public ResponseEntity<ResponseDTO> redirectEndpoint(@Validated @RequestBody RequestDTO requestDTO, BindingResult result)
{
if (result.hasErrors())
{
// Handle validation errors
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
// Do other stuff
return ResponseEntity.status(HttpStatus.OK).build();
}
}
И этот тестовый класс:
@RunWith(SpringRunner.class)
@WebMvcTest(GatewayController.class)
public class GatewayControllerTest
{
@Autowired
private MockMvc mockMvc;
@MockBean
private RequestValidator requestValidator;
@MockBean
private BindingResult bindingResult;
private JacksonTester<RequestDTO> requestJacksonTester;
@Before
public void setUp() throws Exception
{
JacksonTester.initFields(this, new ObjectMapper());
Mockito.when(requestValidator.supports(ArgumentMatchers.any())).thenReturn(true);
}
@Test
public void whenRedirectWithValidationErrorsThenBadRequestReturned() throws Exception
{
RequestDTO request = new RequestDTO();
// Set some values
Mockito.when(bindingResult.hasErrors()).thenReturn(true);
mockMvc.perform(MockMvcRequestBuilders.post(ROOT_MAPPING + REDIRECT_MAPPING).contentType(MediaType.APPLICATION_JSON).content(requestJacksonTester.write(request).getJson())).andExpect(MockMvcResultMatchers.status().isBadRequest());
}
}
Когда я запускаю этот код, тестовый случай завершается неудачно по этой причине: Ожидаемый статус: 400 Фактический: 200
Итак, я хочу смоделировать BindingResult
, переданный в качестве параметра методу redirectEndpoint
в Контроллере, чтобы при вызове bindingResult.hasErrors()
это возвращало true, и тестcase pass.
Я много раз искал, но безуспешно.Любые предложения, как это сделать?
Заранее спасибо.