Apache Ant+Junit对Java(Spring MVC(基于注解))工程进行测试(二)
2013-12-27 15:24
477 查看
前言:关于Ant+Junit对Spring MVC(基于注解)的工程测试,网上有很多资料,感谢这些网友提供的资料。
首先声明:本文的重点在于spring mvc工程的测试用例以及其基础类的编写,关于Ant自动测试的代码在Ant+Junit测试(一)中以及做了详细的介绍。
下面将自己测试的项目及其过程形成相应的文档。
一、生成关于的Spring MVC 的DEMO项目,见如下CSDN资料链接:http://download.csdn.net/detail/limingzhong198/6758493。
1、环境介绍:
JDK:1.6;
TOMCTA:6.0.18(安装版);
Spring:3.x;
二、关于Spring MVC 的测试分三层,分别为:Controller层、Service层、Dao层。
1、建立测试相关的目录:testsrc,如下图所示;
2、从图上可以看出来,建立了跟mvc模式一样的三层架构模式,下面详细的介绍一下这三层的测试过程;
A:Controller层:
在Controller层,大家都知道,这是分发http请求的功能层,在这一层中,最主要的就是封装好相关的http请求参数,包括:HandlerMapping、HandlerAdapter等。在实际的项目,我们一般都会写一个Controller层的基础类,在后面的实际测试类中,只有继承该基础类即可,JUnitControllerBase.java内容:
从基础类的代码中,我们可以看到,封装了相关测试需要的基础参数:HandlerMapping、HandlerAdapter,以及包括相关涉及到的配置文件载入。
看实际的Controller层测试类:TestUserController.java:
从实际测试类的代码中可以看到,我们的测试类继承了相关的基础类,这样我们就只需要关注具体测试类的测试用例代码的编写,省去了不少时间成本。
B:Service层:
Service层的测试类编写跟Controller层比较类似,所以直接贴代码:JunitServiceBase.java类
Service层实际测试类:TestUserService.java类:
C:Dao层:
Dao的测试类编写跟Controller层比较类似,所以直接贴代码:JunitDaoBase.java类:
Dao层实际测试类:TestUserDao.java类:
3、工具类:RunAllUtilTestsSuite.java
关于工具类的作用,在Ant+Junit测试(一)的文档中已经介绍,不再做任何的介绍,只是将测试代码贴出来:
4、关于Ant的自动测试功能,同样在Ant+Junit测试(一)中做了详细的介绍,所以不再赘述。
5、最终的效果如下资源链接,有兴趣的可以去下载,都是在上面发布的环境中测试通过的,http://download.csdn.net/detail/limingzhong198/6777705。
介绍完毕。
首先声明:本文的重点在于spring mvc工程的测试用例以及其基础类的编写,关于Ant自动测试的代码在Ant+Junit测试(一)中以及做了详细的介绍。
下面将自己测试的项目及其过程形成相应的文档。
一、生成关于的Spring MVC 的DEMO项目,见如下CSDN资料链接:http://download.csdn.net/detail/limingzhong198/6758493。
1、环境介绍:
JDK:1.6;
TOMCTA:6.0.18(安装版);
Spring:3.x;
二、关于Spring MVC 的测试分三层,分别为:Controller层、Service层、Dao层。
1、建立测试相关的目录:testsrc,如下图所示;
2、从图上可以看出来,建立了跟mvc模式一样的三层架构模式,下面详细的介绍一下这三层的测试过程;
A:Controller层:
在Controller层,大家都知道,这是分发http请求的功能层,在这一层中,最主要的就是封装好相关的http请求参数,包括:HandlerMapping、HandlerAdapter等。在实际的项目,我们一般都会写一个Controller层的基础类,在后面的实际测试类中,只有继承该基础类即可,JUnitControllerBase.java内容:
package com.test.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.BeforeClass; import org.springframework.mock.web.MockServletContext; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.XmlWebApplicationContext; import org.springframework.web.servlet.HandlerAdapter; import org.springframework.web.servlet.HandlerExecutionChain; import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter; import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping; public class JUnitControllerBase { private static HandlerMapping handlerMapping; private static HandlerAdapter handlerAdapter; @BeforeClass public static void setUp() { if (handlerMapping == null) { String[] configs = {"file:WebContent/WEB-INF/conf/applicationContext.xml","file:WebContent/WEB-INF/spring-servlet.xml"}; XmlWebApplicationContext context = new XmlWebApplicationContext(); context.setConfigLocations(configs); MockServletContext msc = new MockServletContext(); context.setServletContext(msc); context.refresh(); msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context); handlerMapping = (HandlerMapping)context.getBean(DefaultAnnotationHandlerMapping.class); handlerAdapter = (HandlerAdapter)context.getBean(context.getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]); } } public ModelAndView excuteController(HttpServletRequest request, HttpServletResponse response) throws Exception { HandlerExecutionChain chain = handlerMapping.getHandler(request); final ModelAndView model = handlerAdapter.handle(request, response, chain.getHandler()); return model; } }
从基础类的代码中,我们可以看到,封装了相关测试需要的基础参数:HandlerMapping、HandlerAdapter,以及包括相关涉及到的配置文件载入。
看实际的Controller层测试类:TestUserController.java:
package com.test.controller; import org.junit.Assert; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.web.servlet.ModelAndView; public class TestUserController extends JUnitControllerBase{ @Test public void testUserController() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); request.setRequestURI("/index.htm"); request.setMethod("POST"); final ModelAndView mav = this.excuteController(request, response); Assert.assertEquals("test", mav.getViewName()); } }
从实际测试类的代码中可以看到,我们的测试类继承了相关的基础类,这样我们就只需要关注具体测试类的测试用例代码的编写,省去了不少时间成本。
B:Service层:
Service层的测试类编写跟Controller层比较类似,所以直接贴代码:JunitServiceBase.java类
package com.test.service; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"file:WebContent/WEB-INF/conf/applicationContext.xml","file:WebContent/WEB-INF/spring-servlet.xml"}) public class JunitServiceBase extends AbstractJUnit4SpringContextTests { }
Service层实际测试类:TestUserService.java类:
package com.test.service; import java.sql.SQLException; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import com.pro.bean.User; import com.pro.service.UserService; public class TestUserService extends JunitServiceBase{ @Autowired private UserService userService; @Test public void testUserService() throws ClassNotFoundException, SQLException { userService.insert(new User(25,"aaa")); } }
C:Dao层:
Dao的测试类编写跟Controller层比较类似,所以直接贴代码:JunitDaoBase.java类:
package com.test.dao; import javax.annotation.Resource; import javax.sql.DataSource; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"file:WebContent/WEB-INF/conf/applicationContext.xml","file:WebContent/WEB-INF/spring-servlet.xml"}) public class JunitDaoBase extends AbstractTransactionalJUnit4SpringContextTests { @Override @Resource(name = "dataSource") public void setDataSource(DataSource dataSource) { super.setDataSource(dataSource); } }
Dao层实际测试类:TestUserDao.java类:
package com.test.dao; import java.sql.SQLException; import java.util.List; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import com.pro.bean.User; import com.pro.dao.UserDao; public class TestUserDao extends JunitDaoBase { @Autowired private UserDao userDao; @Test public void testUserDao() throws ClassNotFoundException, SQLException { List<User> list = userDao.getAllUser(); int size = list.size(); for(int index=0;index<size;index++){ System.out.println(list.get(index).getUserId()+"^"+list.get(index).getUserName()); } } }
3、工具类:RunAllUtilTestsSuite.java
关于工具类的作用,在Ant+Junit测试(一)的文档中已经介绍,不再做任何的介绍,只是将测试代码贴出来:
package com.test.util; import org.junit.runner.RunWith; import org.junit.runners.Suite; import com.test.controller.TestUserController; import com.test.dao.TestUserDao; import com.test.service.TestUserService; /** * @author limingzhong * @desc the method of test with making package */ @RunWith(Suite.class) @Suite.SuiteClasses({ TestUserController.class, TestUserDao.class, TestUserService.class }) public class RunAllUtilTestsSuite {}
4、关于Ant的自动测试功能,同样在Ant+Junit测试(一)中做了详细的介绍,所以不再赘述。
5、最终的效果如下资源链接,有兴趣的可以去下载,都是在上面发布的环境中测试通过的,http://download.csdn.net/detail/limingzhong198/6777705。
介绍完毕。
相关文章推荐
- Apache Ant+Junit对Java(非mvc模式)工程进行测试(一)
- SSH基于注解的junit测试:java.lang.IllegalStateException: Failed to load ApplicationContext问题
- 对基于JUnit和Ant的测试用例执行过程使用Kieker(AspectJ)进行监控的方法
- Spring MVC基于注解的Junit测试
- Java 学习笔记11:Spring MVC 中的基于注解的 Controller
- java里 使用apache-ant和cobertura测试代码覆盖率 环境变量配置
- mvn test 整工程测试解决方案(基于junit.framework)
- 使用Ant与Junit进行自动化测试
- java junit测试,注解引入service报错解决办法
- ant结合junit进行软件自动测试
- EffectiveJava(35) -- 注解优先于命名模式(从零构建JUnit测试类)
- Mybatis基于注解结合Java编写Sql语句进行CRUD
- 单元测试之道——基于junit的java单元测试 的读书笔记与思考
- Spring笔记(第三弹:使用JUnit对Spring工程进行测试)
- redis在Java中通过Junit进行连接测试
- 使用ant进行junit测试
- Maven&Ant:Apache Maven一个潜在的基于java的apache ant的构建工具的替代者。
- 基于java反射的Spring事务代理下的JUnit测试
- java基于poi的excel表格处理(自定义注解、针对List与enum进行处理)
- Spring boot 中的事务管理,并基于junit进行测试