Helo,
У меня проблема с контроллером тестирования, который выдает исключение MethodArgumentNotValidException.
У меня есть объект с аннотацией проверки.
public class Tag extends ResourceSupport {
...
@NotEmpty(message = "Tag name cannot be empty.")
@NotNull(message = "Tag name cannot be empty.")
private String name;
}
Контроллер с аннотацией @Valid для @ RequestBody
@RestController
@RequestMapping(value="/api/tags")
public class TagController {
.......
@PostMapping(value = "")
public ResponseEntity<Tag> addNewTag(@Valid @RequestBody Tag tag) {
Tag createdTag = tagService.saveOrUpdate(tag);
return new ResponseEntity<>(createdTag, HttpStatus.CREATED);
}
}
Теперь я хочу протестировать этот контроллер с модульным тестом
@RunWith(MockitoJUnitRunner.class)
public class TagControllerTest {
private MockMvc mockMvc;
@Before
public void setup() {
JacksonTester.initFields(this, new ObjectMapper());
mockMvc = MockMvcBuilders.standaloneSetup(tagController).setControllerAdvice(new GlobalExceptionHandlerController()).build();
}
@Test
public void shouldntAllowToSetTagNameEmpty() throws Exception {
Tag tag1 = new Tag();
mockMvc.perform(post("/api/tags").contentType(MediaType.APPLICATION_JSON)
.content(jsonTags.write(tag1).getJson()))
.andExpect(status().isBadRequest());
}
Глобальный класс обработки исключенийСоздан таким образом. Это только в качестве примера формы Интернет.
@RestControllerAdvice
public class GlobalExceptionHandlerController extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {
String bodyOfResponse = ex.getMessage();
return new ResponseEntity(bodyOfResponse, headers, HttpStatus.BAD_REQUEST);
}
Тест проходит, так как это только статус теста, но в консоли у меня есть трассировка стека с журналом ошибок
org.springframework.web.bind.MethodArgumentNotValidException: проверка не удалась для аргумента с индексом 0 в методе: ..... сообщение по умолчанию [Имя тега не может быть пустым.]]
Это правильно, эта ошибкатрассировки стека появляются в журнале консоли?