- 浏览: 1011372 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
用Spring提供的JUnit框架扩展对DAO或Service层进行单元测试
单元测试及其背后的组件易测性是贯穿Spring应用的核心理念之一。一直以来,与测试独立的Java对象相比,由于J2EE Web组件必须运行于某种容器,或者还要与基于HTTP的Web环境交互,所以测试它们是一项艰巨而复杂的任务。
Spring Mock包提供了一些扩展自JUnit框架的测试基类,这些基类简化了对依赖注射和事务管理的单元测试。
下面的内容来自csdn的一篇文章,算是helloworld教程吧。
一、Spring提供的JUnit框架扩展:
AbstractSpringContextTests :spring中使用spring上下文测试的Junit扩展类,我们一般不会使用这个类来进行单元测试,它是spring内部设计使用到的类
AbstractDependencyInjectionSpringContextTests :这是AbstractSpringContextTests的直接子类,支持依赖spring上下文的测试类,这个类不支持事务。
AbstractTransactionalSpringContextTests
:
这是AbstractDependencyInjectionSpringContextTests的直接子类,这个类一般应用在事务相关的测试中,一旦
完成每个测试它就会正常地回滚事务,不会真正更新数据库,若要手动设置事务相关操作,你可以重载onSetUpInTransaction和
onTearDownInTransaction方法,以便手工开始并提交事务,或者调用setComplete()方法。这个类也可以在没有事务的情况
下,使用这个类。
AbstractTransactionalDataSourceSpringContextTests:这是
AbstractTransactionalSpringContextTests的直接子类,它使用了Spring的基于JDBC的
jdbcTemplate工具类,支持数据库级别的事务。
二、如何在你的TestCase Class里取得spring context
你的TestCase Class必须继承的是上述四个AbstractXXXSpringContextTests中的其中一个,那么就必须实现下面这个方法来取得spring context:
protected abstract String[] getConfigLocations();
例如:
public String[] getConfigLocations() {
String[] configLocations = { "applicationContext.xml","hibernate-context.xml" };
return configLocations;
}
请 注意要加载的context xml file的路径问题:上述的代码是基于classpath,因此applicationContext.xml和hibernate- context.xml必须放在classpath里(方法一是把xml files放到WEB-INF/classes目录下,另一种方法就是在project properties里把xml files的路径加到classpath里)
那么如果你一定要把context xml files放到WEB-INF目录下,也是可以的,那么应该基于file(基于file的相对路径是相对于project root folder),代码如下:
public
String[] getConfigLocations() {
<!--CRLF-->
String[] configLocations = { "file:WebContent/WEB-INF/applicationContext.xml"
};
<!--CRLF-->
return
configLocations;
<!--CRLF-->
}
<!--CRLF-->
AbstractXXXSpringContextTests就会根据根据getConfigLocations方法返回的context xml位置的数组来加载并且对加载的Context提供缓存。这是非常重要的,因为如果你在从事一个大项目时,启动时间可能成为一个问题--这不是 Spring自身的开销,而是被Spring容器实例化的对象在实例 化自身时所需要的时间。例如,一个包括50-100个Hibernate映射文件的项目可能需要10-20秒的时间来加载上述的映射文件,如果在运行每个 测试fixture里的每个测试案例前都有这样的开销,将导致整个测试工作的延时,最终有可能(实际上很可能)降低效率。
在某种极偶然的情况下,某个测试可能“弄脏”了配置场所,并要求重新加载--例如改变一个bean的定义或者一个应用对象的状态--你可以调用 AbstractDependencyInjectionSpringContextTests 上的 setDirty() 方法来重新加载配置并在执行下一个测试案例前重建application context
当类 AbstractDependencyInjectionSpringContextTests(及其子类)装载你的Application Context时,你可以通过Setter方法来注入你想要的来自context的bean,而不需要显式的调用 applicationContext.getBean(XXX)。因为 AbstractDependencyInjectionSpringContextTests会从getConfigLocations()方法指定的 配置文件中帮你自动注入
下面的例子就是通过setter方法来获得context里的ProductManager bean:
public class MyTest extends AbstractDependencyInjectionSpringContextTests {
<!--CRLF-->
ProductManager productManager;
<!--CRLF-->
<!--CRLF-->
public
String[] getConfigLocations() {
<!--CRLF-->
String[] configLocations = { "file:WebContent/WEB-INF/applicationContext.xml"
};
<!--CRLF-->
return
configLocations;
<!--CRLF-->
}
<!--CRLF-->
<!--CRLF-->
public void testGetProduct() {
<!--CRLF-->
assertEquals("tomson" ,productManager.getProductByName("tomson" ).getName());
<!--CRLF-->
}
<!--CRLF-->
<!--CRLF-->
//通过setter方法自动从context里注入productManager bean,而不用显示调用applicationContext.getBean(XXX)
<!--CRLF-->
public void setProductManager(ProductManager productManager) {
<!--CRLF-->
this
.productManager = productManager;
<!--CRLF-->
}
<!--CRLF-->
}
<!--CRLF-->
<!--CRLF-->
但是如 果context里有多个bean都定义为一个类型(例如有多个bean都是ProductManager class类型的),那么对这些bean就无法通过setter方法来自动依赖注入(因为有多个bean同一个类型,不知要自动注入哪个)。在这种情况下 你需要显示的调用applicationContext.getBean(XXX)来注入。如:
public class MyTest extends AbstractDependencyInjectionSpringContextTests {
<!--CRLF-->
ProductManager productManager;
<!--CRLF-->
<!--CRLF-->
public
String[] getConfigLocations() {
<!--CRLF-->
String[] configLocations = { "file:WebContent/WEB-INF/applicationContext.xml"
};
<!--CRLF-->
return
configLocations;
<!--CRLF-->
}
<!--CRLF-->
<!--CRLF-->
public void onSetUp() {
<!--CRLF-->
productManager = (ProductManager) applicationContext.getBean("productManager"
);
<!--CRLF-->
}
<!--CRLF-->
<!--CRLF-->
public void testGetProduct() {
<!--CRLF-->
assertEquals("tomson" ,productManager.getProductByName("tomson" ).getName());
<!--CRLF-->
}
<!--CRLF-->
}
<!--CRLF-->
<!--CRLF-->
如果你的TestCase不使用依赖注入,只要不定义任何setters方法即可。或者你可以继承 AbstractSpringContextTests --这个 org.springframework.test 包中的根类,而不是继承AbstractDependencyInjectionSpringContextTests(及其子类)。这是因为 AbstractSpringContextTests 只包括用来加载Spring Context的便利方法但没有自动依赖注入的功能。
发表评论
-
调试jdk中的源码,查看jdk局部变量
2013-06-15 23:30 1048调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1070Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 18101、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 932“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 9161、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 990概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 883下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 914<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1647安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1153Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 1019///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 1056J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1259六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1574HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2115最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 966Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 965在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1045maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 130924小时制时间 显示: public clas ... -
使用Spring的表单标签库
2011-11-22 20:08 106713.9. 使用Spring的 ...
相关推荐
在Java和Spring Boot环境中,我们可以使用JUnit框架来进行单元测试,同时结合Mockito等工具来模拟对象行为,以便专注于测试目标方法。 对于多模块的Spring Boot项目,每个模块可能包含不同的组件,如Service层、...
通过JUnit,开发者可以方便地编写针对Struts2 Action和Spring Service层的单元测试,从而确保代码的质量。 #### Maven2.2.1 Maven是一个项目管理和理解工具,它提供了一套标准的构建生命周期,能够自动化构建过程中...
9. **测试**:通过JUnit测试DAO和Service层的功能,通过浏览器测试前端与后端的交互。 这个组合提供了强大的功能,使开发者能够快速构建可扩展且易于维护的Web应用程序。在实践中,理解每个组件的工作原理以及它们...
Unitils是一个自动化测试框架,它提供了对Spring、Hibernate等流行技术的内置支持,让开发者能够快速编写可维护的测试代码。它包含了一些模块,如数据库测试、ORM测试和依赖注入测试,旨在减少设置和清理测试环境所...
**JUnit** 是Java编程语言最常用的单元测试框架,它使得开发者能够编写可重复运行的测试用例,以验证代码功能的正确性。在本项目中,Junit被用于编写针对MyBatis的单元测试,确保数据库操作的正确性和效率。通过单元...
5. **src/test**: 测试代码目录,使用JUnit进行单元测试或集成测试。 项目结构遵循Maven的标准目录约定,使得代码组织清晰,易于维护。开发者可以在此基础上添加业务逻辑,扩展功能,或者结合其他Spring模块创建更...
10. **测试与部署**:编写JUnit测试用例,对Controller、Service、DAO层进行单元测试。测试无误后,将项目打包成WAR文件,部署到Tomcat服务器上运行。 通过上述步骤,我们完成了Spring MVC、Spring、Hibernate的...
7. 测试:使用JUnit或其他测试框架进行单元测试和集成测试,确保各个组件协同工作。 通过这样的整合,我们可以充分利用Spring的IOC和AOP特性,简化对象管理和事务处理;SpringMVC则让Web层更加清晰,易于维护;...
使用JUnit进行单元测试,确保每个DAO方法的功能正确性,Mockito等工具可用于模拟数据库交互,提高测试覆盖率。 10. 持续集成与自动化 结合Maven或Gradle构建工具,配置自动化测试、代码检查和部署流程,确保DAO层...
使用JUnit和Mockito等工具进行单元测试,确保每个组件的正确性。在SSM框架中,Spring Test提供了一套完整的测试支持,可以方便地测试Spring的bean和依赖注入。 SSM框架的整合不仅简化了开发工作,也提高了代码的可...
5. 使用JUnit编写单元测试,对Service和DAO层的功能进行验证。 6. 设计View层,利用JSP或Thymeleaf等模板引擎,结合jQuery UI创建交互式的用户界面。 7. 配置Spring MVC的DispatcherServlet,处理请求转发和视图解析...
MyBatis是一个优秀的持久层框架,它简化了对数据库的操作,通过XML或注解方式配置SQL语句,将SQL与Java代码解耦,提高了开发效率。MyBatis支持动态SQL,可以编写更复杂的查询条件,而且与ORM(Object-Relational ...
16.7.1 对LoginController进行单元测试 16.7.2 使用Spring Servlet API模拟对象 16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体...
Spring框架的@Service注解可以标记业务服务类,而@Autowired注解则自动注入所需的依赖,如DAO层的对象。在这个层面上,开发者会实现用户注册、商品浏览、购物车管理、订单处理等业务功能。 数据访问层,Spring提供...
- 使用Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)特性,创建Service层和DAO层,实现业务逻辑和数据访问。 - 将Service和DAO注入到WebWork的Action中,...
使用JUnit框架为数据访问层编写单元测试,确保数据访问逻辑的正确性。 **2.7 配置Ibatis和PAFA** 配置MyBatis(或iBatis)与PAFA的集成,确保数据访问层能够正常工作。 **2.8 实现IbatisDAO** 根据业务需求实现...
SSH框架是Java开发中常用的三大框架——Spring、Struts和Hibernate的组合,它们协同工作以构建高效、可维护的Web应用程序。MyEclipse是一款强大的集成开发环境,特别适合于Java Web项目的开发,包括SSH框架的集成。...
7. 整合测试:使用JUnit进行单元测试,可以测试单独的Service或DAO方法,也可以使用MockMVC进行模拟HTTP请求的集成测试。 8. 性能优化:可以通过缓存机制(如Hibernate的第二级缓存)、分页查询、懒加载等方式提高...
Struts2SpringUnitDemo是一个基于Struts2、Spring和JUnit的单元测试实例,它展示了如何在实际项目中整合这三个框架并进行单元测试。这个源码提供了深入理解MVC(Model-View-Controller)架构和依赖注入(DI)原则的...
在Spring MVC项目中,可以使用JUnit和Mockito等工具进行测试。 6. **配置文件**: Spring MVC项目的配置文件包括web.xml(定义DispatcherServlet和Spring的监听器)、servlet-context.xml(配置Spring MVC的bean和...