利用junit对springMVC的Controller进行测试

释放双眼,带上耳机,听听看~!

        平时对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

 

参考:http://blog.csdn.net/a95473004/article/details/8926929

http://ysj5125094.iteye.com/blog/2082110

给TA打赏
共{{data.count}}人
人已打赏
安全技术

Bootstrap 4 Flex(弹性)布局

2021-12-21 16:36:11

安全技术

从零搭建自己的SpringBoot后台框架(二十三)

2022-1-12 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索