I am using Spring Test to test my Spring Web MVC application, And I am trying do some validation.
this is my User entity
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
}
And this is my Controller
@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));
}
}
If I try to post a illegal params to this application, i will return 400 status correctly.
I post this from postman
{
"name": "abc",
"age": 333
}
It return 400 as my expected.
But problem is, I try to use 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);
}
}
But mocTest result is 200ok
java.lang.AssertionError: Range for response status value 200
Expected :CLIENT_ERROR
Actual :SUCCESSFUL
I don't konw what is the problem with my test. Are I write wrong test?
I have already write many test, they works fine except this one