`

利用Spring扩展机制Junit测试Dao和Service的总结

阅读更多
   在网上看了很多关于Junit测试Dao和Service的文章,然后做出自己需要的例子,这里源码共享一下,以此回馈一下
   介绍一下Srping的Junit扩展机制相关类:
       下载包:spring-test.jar
   在包org.springframework.test下的Spring测试父类
    1、AbstractSpringContextTests类[1],该类全部方法是protected的,通常不使用这个类,而使用它的子类们。  
   
    2、AbstractDependencyInjectionSpringContextTests类[2]:继承于类[1]:如果仅仅使用Spring依赖注入功能,可以让测试用例继承该类。  
  
    3、AbstractTransactionalSpringContextTests类[3]:继承于类[2], 继承该类的测试用例在spring管理的事务中进行,测试完后对数据库的记录不会造成任何影响。对数据库进行一些操作后,它会自动把数据库回滚,这样就保证了你的测试对于环境没有任何影响。  

    4、AbstractTransactionalDataSourceSpringContextTests:继承于类[3],  功能更强大,用于测试持久层组件,看其源代码,  有一行"protected JdbcTemplate jdbcTemplate;",提供了一个JdbcTemplate的变量, 通过该对象可以直接操作数据库。 
    继承了这四个类的测试类都是属于Test Case性质,可以在Test Suite里跑。
 
    在包org.springframework.test.context.junit4下的Spring测试父类
    AbstractTransactionalJUnit4SpringContextTests同样在spring管理的事务中进行,但是继承该类后无法再在Test Suite里跑。

    以下是测试Service的Abstract方法,写测试类时可以继承该方法,让测试类变得简单。
    AbstractServiceTransactionalTests.Java
   
package com.Bruce.springJunit.service;
import org.springframework.test.AbstractTransactionalSpringContextTests;

/**
 * 基于AbstractTransactionalSpringContextTests的抽象测试类
 * 
 * 继承此类,某个测试方法需要事物回滚时,直接在方法前加@Rollback(true)即可
 * @author Bruce Qin 2010.10.11 
 */
public abstract class AbstractServiceTransactionalTests extends
		AbstractTransactionalSpringContextTests {

	// 文件系统绝对路径
	// String filePath = "file:D:/WorkSpace_JEE/ParkManager/src/";
	// String applicationContextFile = "applicationContext.xml";

	// 项目classpath路径
	 String applicationContextFile="classpath:applicationContext.xml";

	/**
	 * 无参构造函数
	 */
	public AbstractServiceTransactionalTests() {
		super();
	}

	/**
	 * 有参构造函数
	 * 
	 * @param name
	 */
	public AbstractServiceTransactionalTests(String name) {
		super(name);
	}

	/**
	 * 需要加载的配置文件地址列表
	 * @return new String[] { applicationContextFile };
	 */
	abstract String[] getOtherConfigs();

	/**
	 * 覆盖的获取配置文件地址的方法
	 */
	protected String[] getConfigLocations() {
		String[] otherConfigs = getOtherConfigs();
		// 所有配置文件列表
		String[] configFiles = new String[otherConfigs.length + 1];
		configFiles[0] = applicationContextFile;

		/**
		 * public static void arraycopy(Object src, int srcPos, Object dest, int
		 * destPos, int length) 
		 * 源数组中位置在 srcPos到srcPos+length-1 之间的组件被分
		 * 别复制到目标数组中的 destPos 到 destPos+length-1 位置。
		 */
		System.arraycopy(otherConfigs, 0, configFiles, 1, otherConfigs.length);
		return configFiles;
	}
   

   
  
   测试类TestSysparamconfService.java 代码如下:
 
package com.Bruce.springJunit.service;

import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import com.Bruce.entity.Sysparamconf;
import com.Bruce.service.SysparamconfService;

public class TestSysparamconfService extends AbstractServiceTransactionalTests {

	@Autowired
	private SysparamconfService sysparamconfService;

	@Override
	String[] getOtherConfigs() {
		return new String[] { applicationContextFile };
	}

	@Test
	public void testFindAll() {
		// fail("Not yet implemented");
		System.out.println("test FindAll()---size "
				+ sysparamconfService.findAll().size());
	}

	@Test
	@Rollback(true)
   //保护数据库现场,让事物不提交,直接rollback
	public void testWriteSysparameterSysparamconf() {
		System.out.println("test WriteSysparameter...");		
		Sysparamconf sysparamconf = new Sysparamconf();
		boolean test;
		sysparamconf.setPname("testName2");
		sysparamconf.setPtype(1);
		sysparamconf.setPvalue("testName2_value2");
		test = sysparamconfService.writeSysparameter(sysparamconf);
		assertTrue(test);

	}

}


    至于Dao的测试类写法就大同小异了。
     好了,基于框架的Junit测试用例的砖呀玉呀都抛完咯!
   
1
0
分享到:
评论
1 楼 b_l_east 2011-08-23  
先留位置!

相关推荐

    struts2_spring3.0_Junit4.7_Maven2.2.1_整合运行说明_培训.pdf )

    通过JUnit,开发者可以方便地编写针对Struts2 Action和Spring Service层的单元测试,从而确保代码的质量。 #### Maven2.2.1 Maven是一个项目管理和理解工具,它提供了一套标准的构建生命周期,能够自动化构建过程中...

    SpringBoot 多模块Dao层单元测试

    在Java和Spring Boot环境中,我们可以使用JUnit框架来进行单元测试,同时结合Mockito等工具来模拟对象行为,以便专注于测试目标方法。 对于多模块的Spring Boot项目,每个模块可能包含不同的组件,如Service层、...

    spring3.0 + ibatis+jquery+注解建立dao、service类

    9. **测试**:通过JUnit测试DAO和Service层的功能,通过浏览器测试前端与后端的交互。 这个组合提供了强大的功能,使开发者能够快速构建可扩展且易于维护的Web应用程序。在实践中,理解每个组件的工作原理以及它们...

    使用Unitils测试DAO

    综上所述,"使用Unitils测试DAO"的主题涵盖了如何利用Unitils库和DBUnit组件来创建可靠的DAO层测试,包括数据库的初始化、数据集的管理、断言的使用,以及自定义工具类的创建和源码分析。这种测试方法有助于提升代码...

    springboots+mybatis+junit+oracle.7z

    标题 "springboots+mybatis+junit+oracle.7z" 涉及到的是一个集成开发环境,其中包含了四个核心技术:SpringBoot、Oracle数据库、MyBatis和JUnit。让我们详细了解一下这些技术和它们如何相互协作。 **SpringBoot** ...

    Hibernate4+spring3整合简单测试

    6. **编写DAO和Service层**:创建DAO(数据访问对象)接口和实现,以及业务Service层,通过Spring的@Autowired注解注入HibernateTemplate,从而实现对数据库的操作。 7. **测试**:编写JUnit测试用例,验证CRUD...

    springmvc+maven+junit+jqueryUI

    5. 使用JUnit编写单元测试,对Service和DAO层的功能进行验证。 6. 设计View层,利用JSP或Thymeleaf等模板引擎,结合jQuery UI创建交互式的用户界面。 7. 配置Spring MVC的DispatcherServlet,处理请求转发和视图解析...

    Struts2 Spring Jpa 配置测试

    一个典型的Struts2+Spring+JPA项目会包含以下几个主要部分:Web-INF下的`web.xml`和`struts.xml`,`src/main/resources`下的`applicationContext.xml`和`persistence.xml`,以及`src/main/java`下的Action类、...

    springmvc+spring+hibernate

    10. **测试与部署**:编写JUnit测试用例,对Controller、Service、DAO层进行单元测试。测试无误后,将项目打包成WAR文件,部署到Tomcat服务器上运行。 通过上述步骤,我们完成了Spring MVC、Spring、Hibernate的...

    spring和hibernate整合

    在测试类中,使用Spring的TestContext框架来加载应用上下文,然后注入需要的服务和DAO,进行单元测试和集成测试。 7. **最佳实践**:在实际开发中,推荐使用Spring Data JPA,它是Spring对JPA规范的实现,可以...

    spring mvc demo

    通过这种整合,开发者可以在 Spring MVC 的控制层直接注入 Mybatis 的 DAO 对象,简化了代码的编写,同时利用 Spring 的管理能力,实现了事务的统一处理和依赖注入,提高了开发效率和代码质量。 以上就是关于 ...

    spring 5.3.21源码

    Spring Test模块提供了JUnit和TestNG支持,使得编写测试更加方便。Mockito和其他测试工具的集成使得模拟对象和依赖注入在测试中更加容易。 最后,Spring 5.3.21可能还包括了对Java新特性的支持,如Java 8的Lambda...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    springmvc spring hibernate整合Demo

    9. 测试:编写JUnit测试用例,验证各个组件和流程是否正常工作。 通过这个整合Demo,初学者可以了解这三个框架的交互方式,学习如何在实际项目中应用它们,提升自己的Java Web开发技能。在实践中,还可以结合其他...

    Spring SpringMVC Hibernate整合

    7. 测试:使用JUnit或其他测试框架进行单元测试和集成测试,确保各个组件协同工作。 通过这样的整合,我们可以充分利用Spring的IOC和AOP特性,简化对象管理和事务处理;SpringMVC则让Web层更加清晰,易于维护;...

    Spring+SpringMVC +Hibernate 整合

    7. 整合测试:使用JUnit进行单元测试,可以测试单独的Service或DAO方法,也可以使用MockMVC进行模拟HTTP请求的集成测试。 8. 性能优化:可以通过缓存机制(如Hibernate的第二级缓存)、分页查询、懒加载等方式提高...

    Hibernate4Spring3

    8. **测试**:在给定的描述中提到了"测试小例子",这意味着包含的testH4Spring31文件可能是测试代码,可能包含了JUnit测试用例,用于验证Spring和Hibernate整合后的功能是否正常工作。 9. **整合步骤**:整合Spring...

    Xfire配置Web Service+Spring+Hibernate详细配置流程

    在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同应用程序之间进行数据交换。...在实际开发中,这需要详细理解每个组件的工作原理,并熟练掌握它们的集成方式,才能确保应用的稳定性和扩展性。

    Spring4-5.Spring+mybatis+Spring mvc整合

    - 配置Spring:创建Spring的配置文件,如`applicationContext.xml`,配置数据源、事务管理器、MyBatis的SqlSessionFactory以及Spring的DAO和Service。 - 集成MyBatis:在Spring配置文件中配置SqlSessionFactory,...

    综合spring mvc + spring + hibernate + bootstrap开发图书管理系统

    5. **单元测试与集成测试**:利用JUnit和Mockito等工具进行测试,确保代码质量。 6. **缓存机制**:如使用Redis进行数据缓存,减少数据库压力。 7. **任务调度**:使用Quartz或Spring Task进行定时任务,如自动提醒...

Global site tag (gtag.js) - Google Analytics