`

Spring_MVC(6)测试

阅读更多

这里将用到以下几个包:

引用

aopalliance-1.0.jar
commons-collections.jar
commons-dbcp.jar
commons-logging-1.1.1.jar
commons-pool.jar
junit-4.4.jar
jstl.jar
log4j-1.2.15.jar
mysql-connector-java-5.1.6-bin.jar
spring-aop-2.5.6.jar
spring-beans-2.5.6.jar
spring-context-2.5.6.jar
spring-context-support-2.5.6.jar
spring-core-2.5.6.jar
spring-jdbc-2.5.6.jar
spring-tx-2.5.6.jar
spring-test-2.5.6.jar
spring-web-2.5.6.jar
spring-webmvc-2.5.6.jar
standard.jar


主要增加了spring-test-2.5.6.jar和junit-4.4.jar两个用于测试的包!
这里尤其要说明一下,由于我们使用注解方式自然要用到JUnit-4.X系列,而Sring-Test对于JUnit有个累人的要求,JUnit的版本必须是4.4,不支持高版本(如4.5、4.7等)。否则,会产生java.lang.ClassNotFoundException: org.junit.Assume$AssumptionViolatedException异常。
先来一个能够自动回滚的用于测试的父类——AbstractTestCase
AbstractTestCase.java

Java代码 复制代码
  1. /**  
  2.  * 2009-12-16  
  3.  */  
  4. package org.zlex.spring;   
  5.   
  6. import org.junit.runner.RunWith;   
  7. import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;   
  8. import org.springframework.test.context.ContextConfiguration;   
  9. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;   
  10. import org.springframework.test.context.transaction.TransactionConfiguration;   
  11. import org.springframework.transaction.annotation.Transactional;   
  12.   
  13. /**  
  14.  * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>  
  15.  * @version 1.0  
  16.  * @since 1.0  
  17.  */  
  18. @ContextConfiguration(locations = "classpath:applicationContext.xml")   
  19. @RunWith(SpringJUnit4ClassRunner.class)   
  20. @Transactional  
  21. @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)   
  22. public abstract class AbstractTestCase extends  
  23.         AbstractTransactionalDataSourceSpringContextTests {   
  24.   
  25. }  
/**
 * 2009-12-16
 */
package org.zlex.spring;

import org.junit.runner.RunWith;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
 * @version 1.0
 * @since 1.0
 */
@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public abstract class AbstractTestCase extends
		AbstractTransactionalDataSourceSpringContextTests {

}


让每一个测试类都写一堆配置忒麻烦! 索性来个老爹替子子孙孙都完成基础工作!
逐行分析:
@ContextConfiguration(locations = "classpath:applicationContext.xml")导入配置文件。这时候,我们可以看出之前使用applicationContext.xml文件作为系统总控文件的好处! 当然,Spring-Test的这个配置只认classpath,很无奈,我必须拷贝这些文件到根目录!
@RunWith(SpringJUnit4ClassRunner.class)SpringJUnit支持,由此引入Spring-Test框架支持!
@Transactional这个非常关键,如果不加入这个注解配置,事务控制就会完全失效!
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库!
AbstractTransactionalDataSourceSpringContextTests要想构建这一系列的无污染纯绿色事务测试框架就必须找到这个基类!
给出一个整体结构图:

test子目录下的文件将编译到classpath下,这其实还同时是个maven测试项目!拷一堆配置文件的确有些不方便!
AbstractTestCase.java用于抽象测试类控制。
AccountDaoTest.java用于AccountDao测试。
DaoAllTests.java用于Dao层的整体测试。
来看看AccountDaoTest
AccountDaoTest.java

Java代码 复制代码
  1. /**  
  2.  * 2009-12-16  
  3.  */  
  4. package org.zlex.spring;   
  5.   
  6. import java.util.Date;   
  7.   
  8. import org.junit.Test;   
  9. import org.springframework.beans.factory.annotation.Autowired;   
  10. import org.zlex.spring.dao.AccountDao;   
  11. import org.zlex.spring.domain.Account;   
  12.   
  13. /**  
  14.  * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>  
  15.  * @version 1.0  
  16.  * @since 1.0  
  17.  */  
  18. public class AccountDaoTest extends AbstractTestCase {   
  19.   
  20.     @Autowired  
  21.     private AccountDao accountDao;   
  22.   
  23.     @Test  
  24.     public void test() {   
  25.         Account ac = new Account();   
  26.         ac.setBirthday(new Date());   
  27.         ac.setUsername("SPRING");   
  28.         ac.setPassword("SNOWOLF");   
  29.         ac.setEmail("spring@zlex.org");   
  30.   
  31.         // 创建用户   
  32.         accountDao.create(ac);   
  33.   
  34.         // 检索   
  35.         Account account = accountDao.read("SPRING");   
  36.   
  37.         // 校验   
  38.         assertNotNull(account);   
  39.     }   
  40.   
  41. }  
/**
 * 2009-12-16
 */
package org.zlex.spring;

import java.util.Date;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.zlex.spring.dao.AccountDao;
import org.zlex.spring.domain.Account;

/**
 * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
 * @version 1.0
 * @since 1.0
 */
public class AccountDaoTest extends AbstractTestCase {

	@Autowired
	private AccountDao accountDao;

	@Test
	public void test() {
		Account ac = new Account();
		ac.setBirthday(new Date());
		ac.setUsername("SPRING");
		ac.setPassword("SNOWOLF");
		ac.setEmail("spring@zlex.org");

		// 创建用户
		accountDao.create(ac);

		// 检索
		Account account = accountDao.read("SPRING");

		// 校验
		assertNotNull(account);
	}

}


只要记得使用注解@Test标识方法即可!
这里插入了一条数据,之后进行检索。如果数据存在则认为测试成功! 当然,这时候你要看看数据库是不是真的插入了一条数据!
执行这个方法,同时监控数据库,观察日志!最有效的办法是在执行检索方法时加入断点,同时监控数据库记录,你会发现此时数据库无此数据录入! 实际上这是一个未提交的事务!
完成操作,看看这时的日志:

数据库其实已经进行了回滚!
再看看DaoAllTests
DaoAllTests.java

Java代码 复制代码
  1. /**  
  2.  * 2009-12-17  
  3.  */  
  4. package org.zlex.spring;   
  5.   
  6. import org.junit.runner.RunWith;   
  7. import org.junit.runners.Suite;   
  8. import org.junit.runners.Suite.SuiteClasses;   
  9.   
  10. /**  
  11.  * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>  
  12.  * @version 1.0  
  13.  * @since 1.0  
  14.  */  
  15. @RunWith(Suite.class)   
  16. @SuiteClasses( { AccountDaoTest.class, AccountDaoTest.class })   
  17. public class DaoAllTests {   
  18.   
  19. }  
/**
 * 2009-12-17
 */
package org.zlex.spring;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

/**
 * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
 * @version 1.0
 * @since 1.0
 */
@RunWith(Suite.class)
@SuiteClasses( { AccountDaoTest.class, AccountDaoTest.class })
public class DaoAllTests {

}


逐行说明:
@RunWith(Suite.class)集合测试
@SuiteClasses( { AccountDaoTest.class })集合,包括AccountDaoTest类,多个测试类可使用逗号分隔!
这个测试类可用于Dao层集合测试,与Spring无关!

分享到:
评论
3 楼 liutao1600 2013-05-13  
楼主写的太好了,每天学习~~
2 楼 lgfeng2012 2012-04-06  
最后怎么没有源代码啊
1 楼 tamsiuloong 2010-06-28  
这么好的教程 居然没有人看,楼主 我Ding你啊。通俗易懂,不过代码好像你发重复了

相关推荐

    Spring_MVC_教程_快速入门_深入分析

    spring mvc 核心类与接口 spring mvc 核心流程图 spring mvc DispatcherServlet说明 spring mvc 双亲上下文的说明 springMVC-mvc.xml 配置文件片段讲解 ...如何给spring3 MVC中的Action做JUnit单元测试?

    Spring3_MVC+MyBatis3整合搭建基础DEMO

    Spring3_MVC+MyBatis3整合搭建基础DEMO 测试表结构 create table T_TEST ( TEST_ID int not null auto_increment, USERNAME varchar(20), PASSWORD varchar(20), CREATE_DATE datetime, primary key (TEST_ID) ...

    Spring_MVC:SpringMVC测试

    Spring_MVC SpringMVC测试

    Spring_MVC.rar_T7Y_springmvc

    初级springMVC代码,配置文件的配置与简单log4j的测试代码

    基于Spring4MVC的测试Demo

    基于Spring4MVC的测试Demo,Spring4 SpringMVC SpringBoot SpringSide5

    夏昕老师spring _mvc的例子原代码part1

    夏老师《spring开发指南0.8》里第一个login的例子,完整war文件,tomcat&glass fish下测试过的。

    夏昕老师spring _mvc的例子原代码part3

    夏老师《spring开发指南0.8》里用户注册的例子,完整war文件,tomcat&glass fish下测试过的。

    精通Spring MVC 4

    本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...

    夏昕老师spring _mvc的例子原代码part2

    下载文件修正过了,应该可以下载了,如果不行,请把email给我,我一个个发过去。 &lt;br&gt;夏老师《spring开发指南0.8》里第一个login应用freemarker template的例子,完整war文件,tomcat测试。

    一个基于spring_MVC的专利管理系统.zip

    毕业设计可以包括文献综述、需求分析、方案设计、实施与测试等多个阶段,以确保整个过程的科学性和系统性。 其次,毕业设计的完成通常需要学生具备一定的独立思考和解决问题的能力。在研究过程中,学生可能需要采用...

    Spring_MVC_JPA_REPOSITORY_TEST:测试MySQL MVC + JPA存储库,MySQL Base

    带有AngularJS前端的简单Spring Rest API项目。...模型实体spring.mvc.repository-DAO存储库spring.mvc.service-服务测试: spring.mvc.service.BankEntityServiceTest spring.mvc.service.ClientEntityServiceTest

    spring mvc的简单单元测试

    spring mvc的简单单元测试:,详细请参考:http://blog.csdn.net/xiejx618/article/details/21201007

    Spring MVC非注解测试

    Spring MVC非注解测试,用于理解spring mvc原理,然后再结合源码分析,更好的理解spring mvc

    junit针对spring mvc三层测试

    junit针对spring mvc三层测试,通过测试运行,可直接下载运行!

    Spring_MVC_051:Spring MVC 学习总结(五)——校验与文件上传

    Spring MVC 学习总结(五)——校验与文件上传 目录 2.2.7、范围 2.2.8、其它注解 2.3、注解控制器参数 1.4、在UI中添加错误标签 1.5、测试运行 三、使用jQuery扩展插件Validate实现前端校验 3.1、jQuery扩展插件...

    Spring MVC入门教程

    十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八...

    spring MVC数据绑定大全

    含例子 转载自疯芒毕露的专栏 刚开始用spring mvc 做web开发时 经常会不知道如何合适绑定页面数据 用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便 本人最开始也是这么认为 经过一段时间的应用和测试 ...

    angular_spring_mvc

    演示该项目是使用版本7.0.3生成的。...运行单元测试运行ng test以通过执行单元测试。运行端到端测试运行ng e2e通过执行端到端测试。进一步的帮助要获得有关Angular CLI的更多帮助,请使用ng help或查看 。

    基于spring-MVC的在线测试系统(客观题)

    自己写的模拟在线考试系统,虽然只是个demo(其实就是木有用数据库,用的一个静态集合模拟的,方便快速部署),但是建模和架构都是完整的,包含war和源码,只需把war部署到tomcat服务器中就可以运行

Global site tag (gtag.js) - Google Analytics