1
+ package spring .boot .core .web ;
2
+
3
+ import com .fasterxml .jackson .annotation .JsonInclude ;
4
+ import com .fasterxml .jackson .core .type .TypeReference ;
5
+ import com .fasterxml .jackson .databind .ObjectMapper ;
6
+ import org .junit .Test ;
7
+ import org .junit .runner .RunWith ;
8
+ import org .springframework .beans .factory .annotation .Autowired ;
9
+ import org .springframework .boot .test .autoconfigure .web .servlet .AutoConfigureMockMvc ;
10
+ import org .springframework .boot .test .context .SpringBootTest ;
11
+ import org .springframework .mock .web .MockHttpServletResponse ;
12
+ import org .springframework .test .context .TestPropertySource ;
13
+ import org .springframework .test .context .junit4 .SpringRunner ;
14
+ import org .springframework .test .web .servlet .MockMvc ;
15
+ import org .springframework .test .web .servlet .MvcResult ;
16
+ import org .springframework .test .web .servlet .request .MockMvcRequestBuilders ;
17
+ import org .springframework .test .web .servlet .result .MockMvcResultMatchers ;
18
+ import org .springframework .util .LinkedMultiValueMap ;
19
+ import org .springframework .util .MultiValueMap ;
20
+ import spring .boot .core .ValidatingFormInputApplication ;
21
+ import spring .boot .core .domain .User ;
22
+ import spring .boot .core .service .UserService ;
23
+
24
+ import javax .servlet .http .HttpServletResponse ;
25
+ import java .io .IOException ;
26
+ import java .util .Collection ;
27
+ import java .util .Map ;
28
+
29
+ import static junit .framework .TestCase .assertNotNull ;
30
+ import static junit .framework .TestCase .assertTrue ;
31
+ import static org .assertj .core .api .Assertions .assertThat ;
32
+ import static org .hamcrest .CoreMatchers .is ;
33
+ import static org .hamcrest .beans .HasPropertyWithValue .hasProperty ;
34
+ import static org .junit .Assert .assertEquals ;
35
+ import static org .springframework .test .web .servlet .request .MockMvcRequestBuilders .get ;
36
+ import static org .springframework .test .web .servlet .request .MockMvcRequestBuilders .post ;
37
+ import static org .springframework .test .web .servlet .result .MockMvcResultHandlers .print ;
38
+ import static org .springframework .test .web .servlet .result .MockMvcResultMatchers .*;
39
+
40
+ @ RunWith (SpringRunner .class )
41
+ @ SpringBootTest (webEnvironment = SpringBootTest .WebEnvironment .RANDOM_PORT , classes = ValidatingFormInputApplication .class )
42
+ @ AutoConfigureMockMvc
43
+ @ TestPropertySource (locations = "classpath:application.properties" )
44
+ public class UserControllerTest {
45
+
46
+
47
+ @ Autowired
48
+ private MockMvc mockMvc ;
49
+
50
+ @ Autowired
51
+ private UserService userService ;
52
+
53
+ @ Autowired
54
+ private ObjectMapper objectMapper ;
55
+
56
+ @ Test
57
+ public void getUserList () throws Exception {
58
+ mockMvc .perform (get ("/users" ))
59
+ .andExpect (view ().name ("userList" ))
60
+ .andExpect (status ().isOk ())
61
+ .andDo (print ());
62
+ }
63
+
64
+ private User createUser () {
65
+ User user = new User ();
66
+ user .setName ("测试用户" );
67
+ user .setAge (100 );
68
+ user .setBirthday ("1994-01-01" );
69
+ return userService .insertByUser (user );
70
+ }
71
+
72
+ @ Test
73
+ public void createUserForm () throws Exception {
74
+
75
+ mockMvc .perform (get ("/users/create" ))
76
+ .andDo (print ())
77
+ .andExpect (view ().name ("userForm" ))
78
+ .andExpect (request ().attribute ("action" , "create" ))
79
+ .andDo (print ())
80
+ .andReturn ();
81
+ }
82
+
83
+ @ Test
84
+ public void postUser () throws Exception {
85
+ User user = createUser ();
86
+ assertNotNull (user );
87
+
88
+ MultiValueMap parameters = new LinkedMultiValueMap <String , String >();
89
+ Map <String , String > maps = objectMapper .convertValue (user , new TypeReference <Map <String , String >>() {
90
+ });
91
+ parameters .setAll (maps );
92
+
93
+ mockMvc .perform (post ("/users/create" ).params (parameters ))
94
+ .andDo (print ())
95
+ .andExpect (status ().is (HttpServletResponse .SC_FOUND ))
96
+ .andDo (print ())
97
+ .andExpect (view ().name ("redirect:/users/" ))
98
+ .andDo (print ())
99
+ .andReturn ();
100
+ }
101
+
102
+ @ Test
103
+ public void getUser () throws Exception {
104
+
105
+ MvcResult result = mockMvc .perform (get ("/users/update/{id}/" , 1 ))
106
+ .andExpect (status ().isOk ())
107
+ .andExpect (view ().name ("userForm" ))
108
+ .andExpect (MockMvcResultMatchers .model ().attributeExists ("action" ))
109
+ .andExpect (model ().attribute ("user" , hasProperty ("id" , is (1L ))))
110
+ .andExpect (model ().attribute ("user" , hasProperty ("name" , is ("Sergey" ))))
111
+ .andExpect (model ().attribute ("user" , hasProperty ("age" , is (24 ))))
112
+ .andExpect (model ().attribute ("user" , hasProperty ("birthday" , is ("1994-01-01" ))))
113
+ .andReturn ();
114
+
115
+
116
+ MockHttpServletResponse mockResponse =result .getResponse ();
117
+ assertThat (mockResponse .getContentType ()).isEqualTo ("text/html;charset=UTF-8" );
118
+
119
+ Collection <String > responseHeaders = mockResponse .getHeaderNames ();
120
+ assertNotNull (responseHeaders );
121
+ assertEquals (2 , responseHeaders .size ());
122
+ assertEquals ("Check for Content-Type header" , "Accept-Language" , responseHeaders .iterator ().next ());
123
+ String responseAsString =mockResponse .getContentAsString ();
124
+ assertTrue (responseAsString .contains ("用户管理" ));
125
+ }
126
+
127
+ @ Test
128
+ public void putUser () throws Exception {
129
+ User user = createUser ();
130
+ assertNotNull (user );
131
+
132
+ MultiValueMap parameters = new LinkedMultiValueMap <String , String >();
133
+ Map <String , String > maps = objectMapper .convertValue (user , new TypeReference <Map <String , String >>() {
134
+ });
135
+ parameters .setAll (maps );
136
+
137
+ mockMvc .perform (post ("/users/update" ).params (parameters ))
138
+ .andDo (print ())
139
+ .andExpect (status ().is (HttpServletResponse .SC_FOUND ))
140
+ .andDo (print ())
141
+ .andExpect (view ().name ("redirect:/users/" ))
142
+ .andDo (print ())
143
+ .andReturn ();
144
+ }
145
+
146
+ @ Test
147
+ public void deleteUser () throws Exception {
148
+ mockMvc .perform ( MockMvcRequestBuilders .delete ("/users/delete/{id}" , 1L ) )
149
+ .andDo (print ())
150
+ .andExpect (status ().is (HttpServletResponse .SC_FOUND ))
151
+ .andExpect (view ().name ("redirect:/users/" ));
152
+ }
153
+
154
+ public static byte [] convertObjectToJsonBytes (Object object ) throws IOException {
155
+ ObjectMapper mapper = new ObjectMapper ();
156
+ mapper .setSerializationInclusion (JsonInclude .Include .NON_NULL );
157
+ return mapper .writeValueAsBytes (object );
158
+ }
159
+ }
0 commit comments