使用Maven + Hibernate +
SpringTest框架进行单元测试Demo
之前有同事研究内嵌DB以便提供单元测试所需的数据环境,无果,毕竟难以完全实现各种类型DB的独有特性了。我们采用Mock的方式,进行依赖对象构建。由于系统没有基于依赖注入的进行建构,编写UnitTest很容易成了搭建复杂繁琐的系统环境,背离了“单元”的初衷。我在考虑,采用SpingTest框架为单元测试提供了便利的依赖注入管理设施,使我们从冗余复杂中解放出来。而使用Hibernate对底层持久化进行了屏蔽,很好实现了高层次API单元测试的DB独立性。Maven天生对UnitTest的内建支持,专门搞了个phase叫test,如果真的做到面向接口,测试针对接口,自动化测试也不是不可能。
于是做了一个简单的Demo如下:
Maven管理各种Jar依赖,在这里使用了HsqlDB作为内存DB
Maven POM文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>floyd.welsney</groupId>
<artifactId>orm-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>jboss-hibernate</id>
<url>https://repository.jboss.org/nexus/content/groups/public/</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.GA</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.0.6.RELEASE</version>
</dependency>
</dependencies>
</project>
创建Spring管理的上下文
Spring配置文件
<bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<constructor-arg name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver"></constructor-arg>
<constructor-arg name="url" value="jdbc:hsqldb:mem:xdb"></constructor-arg>
<constructor-arg name="username" value="SA"></constructor-arg>
<constructor-arg name="password" value=""></constructor-arg>
</bean>
<bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
<constructor-arg name="dataSource" ref="jdbcDataSource"></constructor-arg>
</bean>
<bean id="hibernateSessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="jdbcDataSource" />
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.HSQLDialect
hibernate.show_sql=true
hibernate.use_sql_comments=true
hibernate.format_sql=true
</value>
</property>
<property name="mappingResources">
<list>
<value></value>
</list>
</property>
</bean>
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="hibernateSessionFactory"></property>
</bean>
下面是Java Code
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class BaseSpringManagedContextJunitTest {
protected final Logger logger = LogManager.getLogger(this.getClass());
@Autowired
protected SimpleJdbcTemplate simpleJdbcTemplate;
@Autowired
protected HibernateTemplate hibernateTemplate;
protected final void execSqlScript(String scriptPath) {
Resource resource = new ClassPathResource(scriptPath);
SimpleJdbcTestUtils.executeSqlScript(simpleJdbcTemplate, resource, false);
}
@Before
public void setUp() {
execSqlScript("floyd/welsney/test/sql/schema.sql");
execSqlScript("floyd/welsney/test/sql/data.sql");
logger.debug("hsqldb is setup");
}
@After
public void tearDown() {
execSqlScript("floyd/welsney/test/sql/clear.sql");
logger.debug("hsqldb is tearDown");
}
@Test
public void testXXXX() {
logger.debug("Perform unit test");
}
}
说明一下代码,
指定◎ContextConfiguration的Location来加载Spring管理的上下文环境配置文件。
◎Autowired说明需要注入的外部依赖。
◎Before用来加载全新的DB Schma和相应的数据。
◎After清理DB环境的脏数据,以为下一次test准备。
最后执行命令mvn test即可,Eclipse下可以Alt+Shift+X+T运行
分享到:
相关推荐
springMVC+hibernate+spring+maven整合框架代码实例
springMVC+maven+hibernate框架,搭建的过程 可以参考 java进阶(五)------springMVC---springMVC+Hibernate+maven完整搭建运行步骤 http://blog.csdn.net/zzq900503/article/details/49892783
maven+hibernate+spring+springmvc
eclipse工具,用Maven搭建的Spring+Spring MVC+Hibernate框架源码
Spring+SpringMVC+Hibernate+maven项目,适用初学者学习。
Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA
Struts2+Spring3+Hibernate4+Maven+EasyUI整合视频教程源码
Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
Maven+springMVC+Hibernate简单注册和登陆
Maven项目ssh Struts2+hibernate+Spring+maven框架.zip
Spring+SpringMvc+Maven+Hibernate的Demo,结构明了,易于新手
Maven+SpringMVC+Spring+Hibernate简单增删改查(jdk1.8),前端js,jq,ajax都用了, 水平有限,供初学者学习参考。使用增删改查用管理员账号登陆
项目是由maven+struts2+hibernate3+spring+eclipse完成的,压缩包里还有数据库mysql脚本,希望能对你有帮助
maven+spring mvc+hibernate+dubbo的demo,运行前请修改resources/config.properties下的数据配置
pringMVC+Hibernate+Spring+maven框架搭建 。供以后参考使用
Spring+SpringMVC+Hibernate+Maven框架搭建及配置文件源码
Struts2+Spring3+Hibernate4+Maven+EasyUI 实现更删改查等功能,用到很多easyUI的知识
课程介绍 一、课程用到的软件: 1、jdk 1.8 2、eclipse neon 3、tomcat 8 4、jetty 5、MySQL 6、navicat 9+ 二、课程涉及到的技术点 1、Maven基础 ...第12课 使用Maven管理新闻系统开发-项目完善
ssh整合