首页 > 代码库 > SpringMVC是用junit测试

SpringMVC是用junit测试

架包支持:junit.jar;org.springframework.test-3.1.0.RELEASE.jar


测试Dao基础类:JUnitDaoBase

Java代码  收藏代码
  1. package test.test;  
  2. import javax.annotation.Resource;  
  3. import javax.sql.DataSource;  
  4.   
  5. import org.junit.runner.RunWith;  
  6. import org.springframework.test.context.ContextConfiguration;  
  7. import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;  
  8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  9. /** 
  10.  * <b>Summary: </b> TODO Junit 基础类,加载环境  
  11.  * <b>Remarks: </b> TODO DAO测试基础类 
  12.  */  
  13. @RunWith(SpringJUnit4ClassRunner.class)  
  14. @ContextConfiguration(locations = {"classpath:/config/applicationContext.xml"})  
  15. public  class JUnitDaoBase extends AbstractTransactionalJUnit4SpringContextTests {  
  16.   
  17.     /** 
  18.      * <b>Summary: </b> 复写方法 setDataSource 
  19.      *  
  20.      * @param dataSource 
  21.      * @see org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests#setDataSource(javax.sql.DataSource) 
  22.      */  
  23.     @Override  
  24.     @Resource(name = "myDataSource")  
  25.     public void setDataSource(DataSource dataSource) {  
  26.         // TODO Auto-generated method stub  
  27.         super.setDataSource(dataSource);  
  28.     }  
  29. }  



具体dao 测试继承daoBaseTest就可以了

Java代码  收藏代码
  1. package test.java.dao;  
  2.   
  3. import java.util.List;  
  4. import org.junit.Test;  
  5. import org.springframework.beans.factory.annotation.Autowired;  
  6. import com.pinfang.dao.UserDao;  
  7. import com.pinfang.vo.User;  
  8.   
  9. import test.test.JUnitDaoBase;  
  10. /** 
  11.  * dao层测试例子 
  12.  * @author fule 
  13.  * 
  14.  */  
  15. public class UserDaoTest extends JUnitDaoBase {  
  16.     @Autowired  
  17.     private UserDao userDao;  
  18.   
  19.       
  20.   
  21.     @Test  
  22.     public void testUserDao() {  
  23.         User user = new User();  
  24.         user.setPassword("123456");  
  25.         user.setName("大妈");  
  26.         user.setSex(1);  
  27.         //System.out.println(userDao.findOnValidate(user).getMark());  
  28.         List<User> list = userDao.getAll();  
  29.         System.out.println(list);  
  30.         //System.out.println(userDao.findOneByName("张三s"));  
  31.         //System.out.println(userDao.addUser(user));  
  32.     }  
  33. }  



action层测试基础类:JUnitActionBase

Java代码  收藏代码
  1. package test.test;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.junit.BeforeClass;  
  7. import org.springframework.mock.web.MockServletContext;  
  8. import org.springframework.web.context.WebApplicationContext;  
  9. import org.springframework.web.context.support.XmlWebApplicationContext;  
  10. import org.springframework.web.servlet.HandlerAdapter;  
  11. import org.springframework.web.servlet.HandlerExecutionChain;  
  12. import org.springframework.web.servlet.HandlerMapping;  
  13. import org.springframework.web.servlet.ModelAndView;  
  14. import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;  
  15. import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;  
  16.   
  17. /** 
  18.  * JUnit测试action时使用的基类 
  19.  *  
  20.  * @author fule 
  21.  *  
  22.  */  
  23. public class JUnitActionBase {  
  24.     private static HandlerMapping handlerMapping;  
  25.     private static HandlerAdapter handlerAdapter;  
  26.   
  27.     /** 
  28.      * 读取配置文件 
  29.      */  
  30.     @BeforeClass  
  31.     public static void setUp() {  
  32.         if (handlerMapping == null) {  
  33.             String[] configs = {   
  34.                     "file:src/config/applicationContext.xml" };  
  35.             XmlWebApplicationContext context = new XmlWebApplicationContext();  
  36.             context.setConfigLocations(configs);  
  37.             MockServletContext msc = new MockServletContext();  
  38.             context.setServletContext(msc);  
  39.             context.refresh();  
  40.             msc.setAttribute(  
  41.                     WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,  
  42.                     context);// TODO  
  43.             handlerMapping = (HandlerMapping) context  
  44.                     .getBean(DefaultAnnotationHandlerMapping.class);  
  45.   
  46.             handlerAdapter = (HandlerAdapter) context  
  47.                     .getBean(context  
  48.                             .getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]);  
  49.   
  50.             // handlerAdapter = (HandlerAdapter) context.getBean(context  
  51.             // .getNamespace());  
  52.         }  
  53.     }  
  54.   
  55.     /** 
  56.      * 执行request请求的action 
  57.      *  
  58.      * @param request 
  59.      * @param response 
  60.      * @return 
  61.      * @throws Exception 
  62.      */  
  63.     public ModelAndView excuteAction(HttpServletRequest request,  
  64.             HttpServletResponse response) throws Exception {  
  65.         // 这里需要声明request的实际类型,否则会报错  
  66.         request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true);  
  67.         HandlerExecutionChain chain = handlerMapping.getHandler(request);  
  68.         ModelAndView model = null;  
  69.         try {  
  70.             model = handlerAdapter  
  71.                     .handle(request, response, chain.getHandler());  
  72.         } catch (Exception e) {  
  73.             e.printStackTrace();  
  74.         }  
  75.         return model;  
  76.     }  
  77. }  



测试action类继承它就可以了

Java代码  收藏代码
  1. package test.java.action;  
  2.   
  3. import org.junit.Assert;  
  4. import org.junit.Test;  
  5. import org.springframework.beans.factory.annotation.Autowired;  
  6. import org.springframework.mock.web.MockHttpServletRequest;  
  7. import org.springframework.mock.web.MockHttpServletResponse;  
  8. import org.springframework.web.servlet.ModelAndView;  
  9.   
  10. import com.pinfang.logic.service.UserService;  
  11.   
  12. import test.test.JUnitActionBase;  
  13. /** 
  14.  * action测试列子 
  15.  * @author fule 
  16.  * 
  17.  */  
  18. public class UserActionTest extends JUnitActionBase {  
  19. @Autowired UserService service;  
  20.     @Test  
  21.     public void testUserShow() throws Exception{  
  22.         MockHttpServletRequest request = new MockHttpServletRequest();  
  23.         MockHttpServletResponse response = new MockHttpServletResponse();  
  24.         request.setServletPath("/userManager/user.show");  
  25.         request.addParameter("name", "张三");  
  26.         request.addParameter("password", "123456");  
  27.         request.setMethod("post");  
  28.         request.setAttribute("msg", "测试action成功");  
  29.         final ModelAndView mav = this.excuteAction(request, response);  
  30.         Assert.assertEquals("userManager/userlist", mav.getViewName());  
  31.         String msg=(String)request.getAttribute("msg");  
  32.         System.out.println(msg);  
  33.     }  
  34. }  



配置文件记得声明两个bean:

Xml代码  收藏代码
  1. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />  
  2.     <bean  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  



Spring读取WEB-INF下配置文件的方法:
配置文件放在class目录下:

Java代码  收藏代码
  1. view plaincopyprint?  
  2. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springMVCForm-servlet.xml");    


WEB-INF下:

Java代码  收藏代码
  1. [java] view plaincopyprint?  
  2. ApplicationContext applicationContext = new FileSystemXmlApplicationContext("WebContent/WEB-INF/springMVCForm-servlet.xml");   


多个文件可用*表示:

Java代码  收藏代码
  1. [java] view plaincopyprint?  
  2. ApplicationContext applicationContext = new FileSystemXmlApplicationContext("WebContent/WEB-INF/springMVCForm-*.xml");    


注解方式:
配置文件放在class目录下:

Java代码  收藏代码
  1. [java] view plaincopyprint?  
  2. @ContextConfiguration(locations={"classpath:springMVCForm-servlet.xml"})    


WEB-INF下:

Java代码  收藏代码
  1. view plaincopyprint?  
  2. @ContextConfiguration(locations={"file:WebContent/WEB-INF/springMVCForm-servlet.xml"})    




参考:
http://blog.csdn.net/yeohcooller/article/details/7631202
http://a52071453.iteye.com/blog/1559000
http://www.iteye.com/topic/828513

SpringMVC是用junit测试