平时对junit测试service/DAO层已经很熟悉不过了,如果不了解,可以猛戳这里,但是我们要测试controller层,不能总重启服务器吧,(重启tomcat好慢的飘过,别。。。别走啊),那么我们就用junit4模拟请求,测试controller层的方法。
代码1:直接Controller调用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 1import static org.junit.Assert.*;
2
3import java.sql.SQLException;
4
5import org.junit.Before;
6import org.junit.Test;
7import org.junit.runner.RunWith;
8import org.springframework.beans.factory.annotation.Autowired;
9import org.springframework.mock.web.MockHttpServletRequest;
10import org.springframework.mock.web.MockHttpServletResponse;
11import org.springframework.test.context.ContextConfiguration;
12import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
13
14import com.zz.login.web.LoginController;
15
16/**
17 * @author zhzh
18 * 2015-4-7
19 */
20@RunWith(SpringJUnit4ClassRunner.class)
21@ContextConfiguration({"classpath*:/beans.xml","classpath*:/spring-mvc.xml"})
22public class TestController {
23
24 // 模拟request,response
25 private MockHttpServletRequest request;
26 private MockHttpServletResponse response;
27
28 // 注入loginController
29 @Autowired
30 private LoginController loginController ;
31
32 // 执行测试方法之前初始化模拟request,response
33 @Before
34 public void setUp(){
35 request = new MockHttpServletRequest();
36 request.setCharacterEncoding("UTF-8");
37 response = new MockHttpServletResponse();
38 }
39 /**
40 *
41 * @Title:testLogin
42 * @Description: 测试用户登录
43 */
44 @Test
45 public void testLogin() {
46 try {
47 request.setParameter("userName", "admin");
48 request.setParameter("password", "2");
49 assertEquals("login",loginController.loginIn(request,response)) ;
50 } catch (Exception e) {
51 e.printStackTrace();
52 }
53 }
54}
55
56
代码2:调用请求路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 1import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
2import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
3import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
4import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;
5
6import org.junit.Before;
7import org.junit.Test;
8import org.junit.runner.RunWith;
9import org.springframework.beans.factory.annotation.Autowired;
10import org.springframework.test.context.ContextConfiguration;
11import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
12import org.springframework.test.context.transaction.TransactionConfiguration;
13import org.springframework.test.context.web.WebAppConfiguration;
14import org.springframework.test.web.servlet.MockMvc;
15import org.springframework.transaction.annotation.Transactional;
16import org.springframework.web.context.WebApplicationContext;
17
18/**
19 * @author zhzh
20 * 2015-4-7
21 */
22@RunWith(SpringJUnit4ClassRunner.class)
23@WebAppConfiguration
24@ContextConfiguration({"classpath*:/beans.xml","classpath*:/spring-mvc.xml"})
25//当然 你可以声明一个事务管理 每个单元测试都进行事务回滚 无论成功与否
26@TransactionConfiguration(defaultRollback = true)
27@Transactional
28public class TestController2 {
29 @Autowired
30 private WebApplicationContext wac;
31
32 private MockMvc mockMvc;
33
34 @Before
35 public void setup() {
36 this.mockMvc = webAppContextSetup(this.wac).build();
37 }
38
39 @Test
40 public void testLogin() throws Exception {
41 mockMvc.perform((post("/loginTest").param("userName", "admin").param("password", "1"))).andExpect(status().isOk())
42 .andDo(print());
43 }
44
45 /*@Test
46 //有些单元测试你不希望回滚
47 @Rollback(false)
48 public void testInsert() throws Exception {
49 mockMvc.perform((post("/insertTest"))).andExpect(status().isOk())
50 .andDo(print());
51 } */
52}
53
54
注意:import static 的spring类
** **代码3:
LoginController代码片段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 1/**
2 * 登录入口
3 * @param request
4 * @param response
5 * @return
6 */
7 @RequestMapping(value = "/loginTest", method = RequestMethod.POST)
8 public String loginTest(HttpServletRequest request,HttpServletResponse response){
9 String account = request.getParameter("userName");
10 String password = request.getParameter("password");
11 if (account.equals("admin")&&password.equals("1")){
12 return "index";
13 }else{
14 return "login";
15 }
16 }
17