`
gdfloyd
  • 浏览: 74174 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

使用Maven + Hibernate + SpringTest框架进行单元测试Demo

阅读更多

使用Maven + Hibernate + SpringTest框架进行单元测试Demo

 

之前有同事研究内嵌DB以便提供单元测试所需的数据环境,无果,毕竟难以完全实现各种类型DB的独有特性了。我们采用Mock的方式,进行依赖对象构建。由于系统没有基于依赖注入的进行建构,编写UnitTest很容易成了搭建复杂繁琐的系统环境,背离了“单元”的初衷。我在考虑,采用SpingTest框架为单元测试提供了便利的依赖注入管理设施,使我们从冗余复杂中解放出来。而使用Hibernate对底层持久化进行了屏蔽,很好实现了高层次API单元测试的DB独立性。Maven天生对UnitTest的内建支持,专门搞了个phasetest,如果真的做到面向接口,测试针对接口,自动化测试也不是不可能。

 

于是做了一个简单的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运行

分享到:
评论
6 楼 gdfloyd 2012-04-19  
kjwxj 写道
发现问题了,xml是可以直接这样引用的,但是在编译的时候xml不会output到target中去。得手动设置一下

Test Case需要的外部资源*.xml,*.properties放src/test/resources下面
5 楼 kjwxj 2012-04-18  
发现问题了,xml是可以直接这样引用的,但是在编译的时候xml不会output到target中去。得手动设置一下
4 楼 kjwxj 2012-04-18  
又诡异了,没做任何修改,就这样整,放在main下面又可以直接引用到了,开始在junit中始终报异常没有那个entity,一下又好了
3 楼 kjwxj 2012-04-18  
那hibernate的xml的怎么加载呢,这个都是放在main下面的,不可能也要移动到test下面吧
2 楼 gdfloyd 2012-01-23  
zmoxga 写道
log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.

使用了Spring unit test 但是加载不到log4j 配置
博主知道怎么解决吗 。。。

log4j.xml放到src/test/resources下面
1 楼 zmoxga 2012-01-15  
log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.

使用了Spring unit test 但是加载不到log4j 配置
博主知道怎么解决吗 。。。

相关推荐

    spring boot+hibernate+thymeleaf 练习demo项目源码

    在本项目中,"spring boot+hibernate+thymeleaf 练习demo项目源码" 是一个基于Spring Boot框架、Hibernate ORM工具和Thymeleaf模板引擎的实践示例。这个小而精简的Demo旨在帮助学习者理解如何整合这三个核心技术来...

    Eclipse下Spring+SpringMVC+Hibernate框架环境搭建demo

    3. **Hibernate**:是一款强大的对象关系映射(ORM)框架,它简化了数据库操作,将Java对象与数据库表进行映射,使开发者能以面向对象的方式操作数据,而无需关心底层SQL语句。 现在,让我们一步步搭建这个环境: ...

    MAVEN+SSH简单项目demo实例

    总结,这个"MAVEN+SSH简单项目demo实例"旨在帮助初学者理解SSH框架的整合以及Maven在项目管理中的作用,通过实际操作,加深对Java Web开发流程的理解。通过学习这个实例,开发者可以掌握如何在现代开发环境中构建、...

    sshmaven的demo

    SSH Maven Demo是学习和实践Java Web开发的一个很好的实例,它结合了Spring、Struts和Hibernate三大框架的强大功能,并利用Maven进行项目管理和构建。通过这个Demo,开发者可以了解如何在实际项目中集成这些框架,...

    shm框架整合maven架构demo

    【标题】"shm框架整合maven架构demo"指的是一个整合了SpringMVC 4、Hibernate 4和MyBatis 3的项目示例,它基于Maven构建系统进行管理。这个项目旨在展示如何将这三个流行的Java开发框架有效地结合在一起,以实现一个...

    spring boot框架demo

    10. **测试(Testing)**:Spring Boot提供了便利的测试工具和注解,如`@SpringBootTest`,方便编写集成测试和端到端测试。 在导入项目后,开发者可以通过运行主应用程序类启动服务,并通过浏览器或API客户端访问...

    maven web项目 Demo

    10. **Spring Boot与Maven**:虽然`mavenDemo`没有明确提及Spring Boot,但现代Web开发中,Maven常与Spring Boot结合使用,Spring Boot简化了配置,提供了内置的Tomcat服务器,使快速启动Web应用变得简单。...

    基于mevan整合Spring+SpringMVC+Mybatis框架demo实例

    通过这个示例,开发者可以学习如何设置SSM框架的配置文件,如何编写Controller、Service和Mapper接口,以及如何使用Maven进行项目的构建和依赖管理。此外,还可以了解到如何将Mybatis的Mapper接口与XML配置文件配合...

    springdemo:Spring MVC + Maven + MySQL的

    【标题】"Spring MVC + Maven + MySQL"是一个典型的Java Web项目结构,它涵盖了Spring框架的MVC模块、项目构建工具Maven以及关系型数据库MySQL。这个项目可能用于演示如何将这三个关键技术集成到一个完整的Web应用中...

    springdemo

    6. **Spring测试**:如何使用JUnit、Mockito和Spring Test进行单元测试和集成测试,确保代码的健壮性。 7. **Maven或Gradle**:项目构建工具的使用,管理和依赖的版本控制。 8. **日志记录**:Spring支持的日志...

    maven 生成 springmvc+jpa web过程demo

    Maven的`src/test/java`目录下可以编写单元测试,使用JUnit框架。部署时,Maven可以将项目打包成WAR文件,然后通过Tomcat、Jetty等Web服务器进行部署。 7. **VWE文件**: 压缩包中的“Vwe”可能是项目中的某个...

    demo4-Maven-Webapp.zip_MAVEN WEB_maven ssh_maven增删改查

    【标题】"demo4-Maven-Webapp.zip MAVEN WEB_maven ssh_maven增删改查" 提供了一个关于使用Maven构建Java Web应用程序,并结合SSH(Struts2、Hibernate和Spring)框架实现CRUD(增删改查)功能的项目实例。...

    springmvc+spring+mybatis集成框架的环境搭建

    在当今的企业级应用开发中,SpringMVC、Spring 和 MyBatis 是非常流行的三大技术框架,它们通常被组合在一起使用,形成了所谓的 SSM(SpringMVC + Spring + MyBatis)框架。这种组合不仅能够简化开发流程,还能提高...

    springDataJpa测试demo

    总的来说,"springDataJpa测试demo"项目展示了如何在Maven工程中集成Spring Data JPA,连接MySQL数据库,并进行CRUD操作。通过使用Spring Data JPA,开发者可以专注于业务逻辑,而不是繁琐的数据访问层实现。这个...

    Spring boot小demo

    学习这个“Spring Boot小Demo”,你将了解到如何创建一个基本的Spring Boot应用,包括设置主配置类、编写控制器、配置数据库连接、创建RESTful API,以及如何进行单元和集成测试。此外,通过实践,你还能理解Spring ...

    spring boot gradle demo

    - `src/test/java`:存放测试代码,Spring Boot 支持 JUnit 和 Spring Test 用于单元测试和集成测试。 5. **启动类**:在 `src/main/java` 下,你通常会找到一个名为 `Application` 的类,该类使用 `@SpringBoot...

    Spring Boot Java Demo

    Spring Boot 提供了丰富的测试支持,包括 `@SpringBootTest` 注解进行Spring容器的集成测试,以及 `@WebMvcTest` 或 `@DataJpaTest` 进行特定模块的测试。 11. **RESTful API设计** 通常,Spring Boot 应用会提供...

    一个基于SpringMVC的web框架

    9. **单元测试**:Maven支持JUnit和其他测试框架,允许开发者编写单元测试,确保代码质量。 10. **部署**:打包后的war文件可以部署到Tomcat、Jetty等Servlet容器中运行。 通过这个基于SpringMVC的web框架,开发者...

    s2sh-maven项目配置好的文件

    【标题】"s2sh-maven项目配置好的文件"是一个集成开发环境,它结合了Struts2、Maven、Spring和Hibernate四大框架,为Java Web应用程序的开发提供了一个高效的起点。这个项目旨在通过注解实现零配置,简化开发流程。 ...

    Spring boot基础demo

    Spring Boot是Java开发中的一个流行框架,用于简化Spring应用程序的创建和配置过程。它通过提供预配置的starter pom或gradle依赖,使得开发者能够快速构建可运行的应用程序,无需过多的初始化工作。"Spring Boot基础...

Global site tag (gtag.js) - Google Analytics