- 浏览: 994819 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
既然系统基于注解自成一体,那么基于Spring的测试是否可以依赖注解轻松完成呢?坚决地没问题!
Spring-Test义不容辞的完成了这个任务!并且,通过Spring-Test的事务会滚控制,我们可以在不污染数据库数据的前提下进行业务测试!
完成这项内容,本次Spring 注解学习手札整理就正式落幕了! 感谢大家的关注!
相关参考:
Spring 注解学习手札(一) 构建简单Web应用
Spring 注解学习手札(二) 控制层梳理
Spring 注解学习手札(三) 表单页面处理
Spring 注解学习手札(四) 持久层浅析
Spring 注解学习手札(五) 业务层事务处理
Spring 注解学习手札(六) 测试
这里将用到以下几个包:
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
- /**
- * 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 {
- }
/** * 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
- /**
- * 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);
- }
- }
/** * 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
- /**
- * 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 {
- }
/** * 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无关!
发表评论
-
spring bean的生命周期(转)
2011-04-13 11:26 1326分为定义,初始化,使用,消亡 写个例子测试一下: 第一 ... -
反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)(转)
2011-04-13 10:13 1001好长时间没有用过Spring了. 突然拿起书.我都发现自己对A ... -
从spring的IOC说起(二)——spring的Bean的基础配置(转)
2011-03-27 00:38 1277上次简单的说了下spring的IOC,也说到了spring ... -
从spring的IOC说起(一)(转)
2011-03-26 23:37 969这段时间也着实好 ... -
Spring mvc 转发、重定向(转)
2011-01-24 16:29 2530spring控制器最后返 ... -
SSH整合,"sessionFactory " or "hibernateTemplate " is required异常
2010-11-11 15:35 3218将ssh整合时,出现如下异常: 2010-11-11 ... -
spring tx:advice 和 aop:config 配置事务(转)
2010-11-08 16:39 1897<?xml version="1.0&q ... -
spring依赖注入不成功,spring 窗口管理
2010-10-11 09:05 2514有时我们使用spring的注入的时候不成功,如我们在一个地方实 ... -
Org.springframework.orm.hibernate3.*类讲解(转)
2010-10-08 10:04 1420org.springframework.orm.hiberna ... -
spring与hibernate配置jar包功能详解(转)
2010-09-12 22:14 1212近搞SSH和一个框架的整 ... -
Spring 注解学习手札(五) 业务层事务处理
2010-08-04 21:45 1855控制器层、持久层都有了一些介绍,剩下的就是业务层了! 业务层中 ... -
Spring 注解学习手札(四) 持久层浅析
2010-08-04 21:44 1145今天,我们玩玩数据库,搞搞持久层。不搞太复杂的东西,Sprin ... -
Spring 注解学习手札(三) 表单页面处理
2010-08-04 21:43 1238昨天小歇一天,看着两篇博客迅速飙升的点击率,十分欣慰。今天来研 ... -
Spring 注解学习手札(二) 控制层梳理
2010-08-04 21:42 1084昨天对Spring注解有了一 ... -
Spring 注解学习手札(一) 构建简单Web应用
2010-08-04 21:39 1132这个系列学习笔记皆来源于大牛的博客:http://snowol ...
相关推荐
Spring 注解学习手札,个人学习Spring mvc的知识总结
NULL 博文链接:https://snowolf.iteye.com/blog/577989
NULL 博文链接:https://snowolf.iteye.com/blog/583161
NULL 博文链接:https://snowolf.iteye.com/blog/578452
NULL 博文链接:https://snowolf.iteye.com/blog/580194
NULL 博文链接:https://snowolf.iteye.com/blog/587602
NULL 博文链接:https://snowolf.iteye.com/blog/1628861
分享Perl_学习手札书籍,供大家学习、参考及交流perl。
perl学习手札,共同学习,共同进步。希望你能很快掌握perl。
关于作者: 简信昌 “傲尔网”专案经理 博仲法律事务所资讯部门 台北Perl推广组 (Taipei.pm) 召集人 Newzilla召集人 目前专案: Open Source Foundry (OSSF) Newzilla 线上杂志 ...“Perl学习手札”
Perl学习手札.chmPerl学习手札.chmPerl学习手札.chm
Perl 学习手札,这本书介绍了perl的基本语法及perl的一些用法,想了解perl的就看一看
hibernate学习手札.z03
Perl 学习手札,好东西
hibernate学习手札.z01
8086汇编学习手札及各章节检测题详细答案。 配套书籍 王爽的汇编
本资料完全来源于网上收集,对于作者并没有做过多的考证,考虑到作者本身,所以保持原作品不变只是略加整理,为用户提供一个方便的浏览方式。
1-高级perl编程(黑豹书).pdf 2-Perl_学习手札.pdf
非常著名的perl学习手札(初学者有福了),本文档是精美的PDF版,排版精美,是网络上到现在为止能找到的最好的。 全书共分17个小节,通过讲解实例来学习perl,你可以复制这些代码,然后执行。学习非常方便!