Spring 注解学习手札(六) 测试

既然系统基于注解自成一体,那么基于Spring的测试是否可以依赖注解轻松完成呢?坚决地没问题!  
Spring-Test义不容辞的完成了这个任务!并且,通过Spring-Test的事务会滚控制,我们可以在不污染数据库数据的前提下进行业务测试!  
完成这项内容,本次Spring 注解学习手札整理就正式落幕了!  感谢大家的关注!  

相关参考: 
Spring 注解学习手札(一) 构建简单Web应用 
Spring 注解学习手札(二) 控制层梳理 
Spring 注解学习手札(三) 表单页面处理 
Spring 注解学习手札(四) 持久层浅析 
Spring 注解学习手札(五) 业务层事务处理 
Spring 注解学习手札(六) 测试 
Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable 
Spring 注解学习手札(八) 补遗——@ExceptionHandler 


这里将用到以下几个包: 
引用

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. }  

让每一个测试类都写一堆配置忒麻烦!  索性来个老爹替子子孙孙都完成基础工作!  
逐行分析: 
@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. }  

只要记得使用注解 @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. }  

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


相关参考: 
Spring 注解学习手札(一) 构建简单Web应用 
Spring 注解学习手札(二) 控制层梳理 
Spring 注解学习手札(三) 表单页面处理 
Spring 注解学习手札(四) 持久层浅析 
Spring 注解学习手札(五) 业务层事务处理 
Spring 注解学习手札(六) 测试 
Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable 
Spring 注解学习手札(八) 补遗——@ExceptionHandler 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值