Я использую 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
Я не знаю, в чем проблема с моим тестом. Я пишу неправильный тест?
Я уже написал много тестов, они работают нормально, кроме этого
bindingResult
при выполнении отладки? - person deathangel908   schedule 22.04.2019