У меня есть ниже RestController, где я пытаюсь проверить карту входных параметров метода search () для пустых.Однако во время модульного тестирования этот RestController не создается, когда он реализует интерфейс ServiceIF.Если я комментирую реализующий интерфейс, то создается экземпляр контроллера, и валидация работает правильно.Я не понимаю, почему аннотирование @Validated для класса, который реализует некоторый интерфейс, не работает.
@Validated
@RestController
public class MyServiceImpl implements ServiceIF{
@RequestMapping(value = "search", method = RequestMethod.POST, produces = APPLICATION_JSON)
public ResponseEntity<Object> search(@RequestBody @NotEmpty Map<String, String> body) {
}
}
Я пишу приведенный ниже модульный тест для проверки пустой карты:
RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { Application.class})
public class MyServiceImplTest {
@Autowired
private ServiceIF controller;
private MockMvc mockMvc;
@Before
public void setUp(){
mockMvc = MockMvcBuilders.standaloneSetup(controller)
.setControllerAdvice(new InputValidationsExceptionHandler())
.build();
}
@After
public void tearDown(){
mockMvc = null;
}
@Test
public void testSearchInvalid() throws Exception{
ObjectMapper mapper = new ObjectMapper();
Map<String, String> map = new HashMap<>();
String data = mapper.writeValueAsString(map);
//Test invalid case
this.mockMvc.perform(post("/search").content(data)
.contentType(MediaType.APPLICATION_JSON))
.andDo(print())
.andExpect(status().isBadRequest());
}
}