利用junit对springMVC的Controller进行测试
程序员文章站
2022-05-31 10:42:07
...
平时对junit测试service/DAO层已经很熟悉不过了,如果不了解,可以猛戳这里,但是我们要测试controller层,不能总重启服务器吧,(重启tomcat好慢的飘过,别。。。别走啊),那么我们就用junit4模拟请求,测试controller层的方法。
代码1:直接Controller调用方法
import static org.junit.Assert.*; import java.sql.SQLException; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.zz.login.web.LoginController; /** * @author zhzh * 2015-4-7 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath*:/beans.xml","classpath*:/spring-mvc.xml"}) public class TestController { // 模拟request,response private MockHttpServletRequest request; private MockHttpServletResponse response; // 注入loginController @Autowired private LoginController loginController ; // 执行测试方法之前初始化模拟request,response @Before public void setUp(){ request = new MockHttpServletRequest(); request.setCharacterEncoding("UTF-8"); response = new MockHttpServletResponse(); } /** * * @Title:testLogin * @Description: 测试用户登录 */ @Test public void testLogin() { try { request.setParameter("userName", "admin"); request.setParameter("password", "2"); assertEquals("login",loginController.loginIn(request,response)) ; } catch (Exception e) { e.printStackTrace(); } } }
代码2:调用请求路径
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.WebApplicationContext; /** * @author zhzh * 2015-4-7 */ @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration({"classpath*:/beans.xml","classpath*:/spring-mvc.xml"}) //当然 你可以声明一个事务管理 每个单元测试都进行事务回滚 无论成功与否 @TransactionConfiguration(defaultRollback = true) @Transactional public class TestController2 { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = webAppContextSetup(this.wac).build(); } @Test public void testLogin() throws Exception { mockMvc.perform((post("/loginTest").param("userName", "admin").param("password", "1"))).andExpect(status().isOk()) .andDo(print()); } /*@Test //有些单元测试你不希望回滚 @Rollback(false) public void testInsert() throws Exception { mockMvc.perform((post("/insertTest"))).andExpect(status().isOk()) .andDo(print()); } */ }
注意:import static 的spring类
代码3:
LoginController代码片段
/** * 登录入口 * @param request * @param response * @return */ @RequestMapping(value = "/loginTest", method = RequestMethod.POST) public String loginTest(HttpServletRequest request,HttpServletResponse response){ String account = request.getParameter("userName"); String password = request.getParameter("password"); if (account.equals("admin")&&password.equals("1")){ return "index"; }else{ return "login"; } }
推荐阅读
-
SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法
-
利用Jasmine对Angular进行单元测试的方法详解
-
ASP.NET Core对Controller进行单元测试的完整步骤
-
利用Python中的mock库对Python代码进行模拟测试
-
利用junit对springMVC的Controller进行测试
-
SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法
-
利用Python中的mock库对Python代码进行模拟测试
-
用JUnit对你的代码进行单元测试
-
Spring对Controller、Service、Dao进行Junit单元测试总结
-
Spring对Controller、Service、Dao进行Junit单元测试总结