Spring Test MVC не может получить правильный результат с помощью Spring Validator, когда я могу получить правильный результат от почтальона

Я использую Spring Test для тестирования своего приложения Spring Web MVC, и я пытаюсь выполнить некоторую проверку.

это моя сущность пользователя

public class User {
    @NotNull // ensure it is not null
    @Size(min = 5, max = 10, message = "length of name should be 5 - 10")
    private String name;

    private Integer age;

    // ... getter 
    // ... setter
}

А это мой контроллер


@RestController
@RequestMapping("/validation")
public class UserValidation {

    @RequestMapping("/user")
    public ResponseEntity nameNotNull(@Validated @RequestBody User user,
                                      BindingResult bindingResult){
        if (bindingResult.hasErrors()){
            return new ResponseEntity(HttpStatus.valueOf(400));
        }
        return new ResponseEntity(HttpStatus.valueOf(200));
    }
}

Если я попытаюсь опубликовать недопустимые параметры в этом приложении, я правильно верну статус 400.

Я отправляю это от почтальона

{
    "name": "abc",
    "age": 333
}

Он возвращает 400, как я и ожидал.

Но проблема в том, что я пытаюсь использовать mockTest

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration 
@ContextConfiguration({"classpath:applicationContext.xml"})
public class AutowiredTest  {
    @Autowired
    protected WebApplicationContext webApplicationContext;

    protected MockMvc mockMvc;

    @Before
    public void setup(){
        DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(webApplicationContext);
        mockMvc = builder.build();
    }
public class UserValidationTest extends AutowiredTest {

    @Test
    public void nameNotNull() throws Exception{
        User user = new User();
        user.setAge(18);
        user.setName("abc"); // illegal

        String userString = JSONObject.toJSONString(user);

        ResultMatcher msg = MockMvcResultMatchers.content()
                .json(userString);

        ResultMatcher is4xx = MockMvcResultMatchers.status().is4xxClientError();

        MockHttpServletRequestBuilder builder =
                MockMvcRequestBuilders.patch("/validation/user")
                        .contentType("application/json")
                        .content(userString);

        mockMvc.perform(builder)
                .andExpect(is4xx);
    }
}

Но результат mocTest 200ok

java.lang.AssertionError: Range for response status value 200 
Expected :CLIENT_ERROR
Actual   :SUCCESSFUL

Я не знаю, в чем проблема с моим тестом. Я пишу неправильный тест?

Я уже написал много тестов, они работают нормально, кроме этого


person bytefish    schedule 22.04.2019    source источник
comment
Что содержит bindingResult при выполнении отладки?   -  person deathangel908    schedule 22.04.2019
comment
@deathangel908 пишет 0 ошибок   -  person bytefish    schedule 22.04.2019
comment
Вы видели этот вопрос? stackoverflow.com/ вопросы/24049480/   -  person deathangel908    schedule 22.04.2019