在网上看了很多关于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测试用例的砖呀玉呀都抛完咯!
分享到:
相关推荐
通过JUnit,开发者可以方便地编写针对Struts2 Action和Spring Service层的单元测试,从而确保代码的质量。 #### Maven2.2.1 Maven是一个项目管理和理解工具,它提供了一套标准的构建生命周期,能够自动化构建过程中...
在Java和Spring Boot环境中,我们可以使用JUnit框架来进行单元测试,同时结合Mockito等工具来模拟对象行为,以便专注于测试目标方法。 对于多模块的Spring Boot项目,每个模块可能包含不同的组件,如Service层、...
9. **测试**:通过JUnit测试DAO和Service层的功能,通过浏览器测试前端与后端的交互。 这个组合提供了强大的功能,使开发者能够快速构建可扩展且易于维护的Web应用程序。在实践中,理解每个组件的工作原理以及它们...
综上所述,"使用Unitils测试DAO"的主题涵盖了如何利用Unitils库和DBUnit组件来创建可靠的DAO层测试,包括数据库的初始化、数据集的管理、断言的使用,以及自定义工具类的创建和源码分析。这种测试方法有助于提升代码...
标题 "springboots+mybatis+junit+oracle.7z" 涉及到的是一个集成开发环境,其中包含了四个核心技术:SpringBoot、Oracle数据库、MyBatis和JUnit。让我们详细了解一下这些技术和它们如何相互协作。 **SpringBoot** ...
6. **编写DAO和Service层**:创建DAO(数据访问对象)接口和实现,以及业务Service层,通过Spring的@Autowired注解注入HibernateTemplate,从而实现对数据库的操作。 7. **测试**:编写JUnit测试用例,验证CRUD...
5. 使用JUnit编写单元测试,对Service和DAO层的功能进行验证。 6. 设计View层,利用JSP或Thymeleaf等模板引擎,结合jQuery UI创建交互式的用户界面。 7. 配置Spring MVC的DispatcherServlet,处理请求转发和视图解析...
一个典型的Struts2+Spring+JPA项目会包含以下几个主要部分:Web-INF下的`web.xml`和`struts.xml`,`src/main/resources`下的`applicationContext.xml`和`persistence.xml`,以及`src/main/java`下的Action类、...
10. **测试与部署**:编写JUnit测试用例,对Controller、Service、DAO层进行单元测试。测试无误后,将项目打包成WAR文件,部署到Tomcat服务器上运行。 通过上述步骤,我们完成了Spring MVC、Spring、Hibernate的...
在测试类中,使用Spring的TestContext框架来加载应用上下文,然后注入需要的服务和DAO,进行单元测试和集成测试。 7. **最佳实践**:在实际开发中,推荐使用Spring Data JPA,它是Spring对JPA规范的实现,可以...
通过这种整合,开发者可以在 Spring MVC 的控制层直接注入 Mybatis 的 DAO 对象,简化了代码的编写,同时利用 Spring 的管理能力,实现了事务的统一处理和依赖注入,提高了开发效率和代码质量。 以上就是关于 ...
Spring Test模块提供了JUnit和TestNG支持,使得编写测试更加方便。Mockito和其他测试工具的集成使得模拟对象和依赖注入在测试中更加容易。 最后,Spring 5.3.21可能还包括了对Java新特性的支持,如Java 8的Lambda...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...
9. 测试:编写JUnit测试用例,验证各个组件和流程是否正常工作。 通过这个整合Demo,初学者可以了解这三个框架的交互方式,学习如何在实际项目中应用它们,提升自己的Java Web开发技能。在实践中,还可以结合其他...
7. 测试:使用JUnit或其他测试框架进行单元测试和集成测试,确保各个组件协同工作。 通过这样的整合,我们可以充分利用Spring的IOC和AOP特性,简化对象管理和事务处理;SpringMVC则让Web层更加清晰,易于维护;...
7. 整合测试:使用JUnit进行单元测试,可以测试单独的Service或DAO方法,也可以使用MockMVC进行模拟HTTP请求的集成测试。 8. 性能优化:可以通过缓存机制(如Hibernate的第二级缓存)、分页查询、懒加载等方式提高...
8. **测试**:在给定的描述中提到了"测试小例子",这意味着包含的testH4Spring31文件可能是测试代码,可能包含了JUnit测试用例,用于验证Spring和Hibernate整合后的功能是否正常工作。 9. **整合步骤**:整合Spring...
在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同应用程序之间进行数据交换。...在实际开发中,这需要详细理解每个组件的工作原理,并熟练掌握它们的集成方式,才能确保应用的稳定性和扩展性。
- 配置Spring:创建Spring的配置文件,如`applicationContext.xml`,配置数据源、事务管理器、MyBatis的SqlSessionFactory以及Spring的DAO和Service。 - 集成MyBatis:在Spring配置文件中配置SqlSessionFactory,...
5. **单元测试与集成测试**:利用JUnit和Mockito等工具进行测试,确保代码质量。 6. **缓存机制**:如使用Redis进行数据缓存,减少数据库压力。 7. **任务调度**:使用Quartz或Spring Task进行定时任务,如自动提醒...