文档章节

Maven环境下测试库和开发库的配置策略以及支持工具

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 1058
阅读 21
收藏 0
点赞 0
评论 0

在项目的开发和测试上,团队往往有这样一些情况和要求:

  1. 只要是走单元测试,必然要清库

  2. 开发人员不想每次重新构建都从一个空库开始重新输入数据,他们希望能够使用一个已有的库

  3. 如果新版本的数据库发生了结构上的变化,那么,有可能需要重新创建库,对于单元测试库也是如些,因此,开发人员希望新建开发库时能从自动导入一份基础数据,比如单元测试时使用的基础数据,这样就不必从头输入。

综合上述需求,可以这样配置:

  1. 单元测试和正常开发应该使用各自独立的库,单元测试库在每次进行单元测试时自动重建,不会保存任何数据,而开发库在build过程中一般保持不变,不会有重建操作。

  2. 单元测试的重建数据库工作应该发生在执行所有测试用例之前,是构建过程中的一个动作,而不是单元测试用例自己应该负责的。这与为每一个测试准备干净而一致的数据不同(如dbunit所要做的工作),这些操作是每一次测试中都会执行的。

  3. 构建工具需要提供手动重建开发库的功能,以便在需要的时候开发人员可以手动重新建库,并且开发库最好能有一些初始数据。

在Maven环境下,为满足以上需要,可以进行如下配置,使用到的插件是:Hibernate映射工具hbm2ddl和数据库单元测试工具dbunit.hbm2ddl可依据OR映射直接生成数据库schema并自动建库,而dbunit则可以将一份以文件形式(xml或excel)保存的基础数据导入数据库。以下是pom中hibernate插件的配置:

<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>hibernate3-maven-plugin</artifactId>
				<version>2.2</version>
				<executions>
					<execution>
						<id>default-cli</id>
						<goals>
							<goal>hbm2ddl</goal>
						</goals>
						<configuration>
							<components>
								<component>
									<name>hbm2ddl</name>
									<implementation>annotationconfiguration</implementation>
								</component>
							</components>
							<componentProperties>
								<drop>true</drop>
								<jdk5>true</jdk5>
								<format>true</format>
								<outputfilename>dbschema.sql</outputfilename>
								<propertyfile>target/classes/jdbc.properties</propertyfile>
								<skip>${skipTests}</skip>
							</componentProperties>
						</configuration>
					</execution>
					<execution>
						<id>for-unit-test</id>
						<phase>process-test-resources</phase>
						<goals>
							<goal>hbm2ddl</goal>
						</goals>
						<configuration>
							<components>
								<component>
									<name>hbm2ddl</name>
									<implementation>annotationconfiguration</implementation>
								</component>
							</components>
							<componentProperties>
								<drop>true</drop>
								<jdk5>true</jdk5>
								<format>true</format>
								<outputfilename>dbschema_for_test.sql</outputfilename>
								<propertyfile>target/test-classes/jdbc.properties</propertyfile>
								<skip>${skipTests}</skip>
							</componentProperties>
						</configuration>
					</execution>
				</executions>
				<dependencies>
					<dependency>
						<groupId>${jdbc.groupId}</groupId>
						<artifactId>${jdbc.artifactId}</artifactId>
						<version>${jdbc.version}</version>
					</dependency>
				</dependencies>
			</plugin>

需要注意的是:这个配置中配置了两个execution,第一个execution是供手动调用的,没有绑定到任何phase上,而第二个execution是为单元测试准备的,它绑定到了process-test-resources阶段上,每次进行单元测试前都会执行重建数据库的工作。

以下是pom中dbunit插件的配置:

<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>dbunit-maven-plugin</artifactId>
				<version>1.0-beta-3</version>
				<dependencies>
					<dependency>
						<groupId>${jdbc.groupId}</groupId>
						<artifactId>${jdbc.artifactId}</artifactId>
						<version>${jdbc.version}</version>
					</dependency>
				</dependencies>
				<configuration>
					<driver>${jdbc.driverClassName}</driver>
					<url>${jdbc.url}&sessionVariables=foreign_key_checks=0</url>
					<username>${jdbc.username}</username>
					<password>${jdbc.password}</password>
				</configuration>
				<executions>
					<execution>
						<id>default-cli</id>
						<goals>
							<goal>operation</goal>
						</goals>
						<configuration>
							<type>CLEAN_INSERT</type>
							<src>src/test/resources/dbunit-test-data.xml</src>
							<dataTypeFactoryName>${dbunit.dataTypeFactory}</dataTypeFactoryName>
							<transaction>true</transaction>
						</configuration>
					</execution>
				</executions>
			</plugin>

这份配置中只有一个execution,是为手动调用而配置的,单元测试是以代码的方式调用dbunit的。在这份配置中要注意<url/>的值,它在标准url后追加了暂时关闭外键检查的参数,否则在导入数据有可能会失败。

完成上述配制后我们来看一下现在工程的构建过程:

1. 如何进行单元测试

当通过mvn test进行单元测试时,hbm2ddl会在单元测试前的准备阶段完成数据库的重建工作,每一个测试用例在执行前,则会通过dbunit导入一份标准数据,这部分工作是测试用例的@Before方法中实现的。

2. 如何手动建库

当开发人员需要手动建库时,只需要两个简单的命令就可以实现:

  通过hbm2ddl重建数据库:mvn hibernate3:hbm2ddl

  通过dbunit为新库导入基础数据:mvn dbunit:operation

本文转载自:http://blog.csdn.net/bluishglc/article/details/6674740

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
Java应用场景的解决框架资源大全

国外程序员整理的Java资源大全(全部是干货) 原文 译者 唐尤华 翻译自 github akullpp 这里搜集了用来构建应用程序的工具 Apache Maven Maven使用声明进行构建并进行依赖管理 偏向于使用约定...

HappyBoyLi ⋅ 2016/02/27 ⋅ 0

外国程序员整理的Java资料大全

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配...

乔三爷 ⋅ 2015/03/30 ⋅ 1

使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)

前言 但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子。假如一个项目,由A、B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依...

凯文加内特 ⋅ 2015/11/05 ⋅ 0

安卓开发经验分享:资源、UI、函数库、测试、构建一个都不能少

除了高超的武艺,每位黑忍者还需要装备最好的武器。在软件开发的世界里,好的工具能让我们的生活变得更轻松,在更短的时间里写出更棒的代码。 时光回到2008年,那时安卓还很年轻。只有几个相...

拉偶有所依 ⋅ 2015/02/05 ⋅ 0

JAVA基础知识整理 常用框架

JAVA反射---相关资料: 1.Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息 2.反射还可以让我们在运行期实例化对象,调用方法,通过调用...

zheng_pat ⋅ 2015/09/23 ⋅ 2

推荐!国外程序员整理的Java资源大全

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配...

huntering ⋅ 2015/01/13 ⋅ 0

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配...

enosh ⋅ 2015/01/09 ⋅ 2

完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配...

拉偶有所依 ⋅ 2015/05/20 ⋅ 22

这里整理了基于java平台的常用资源

这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步。 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道。thanks. 构建 这里搜...

imzdx ⋅ 2016/09/14 ⋅ 0

推荐!国外程序员整理的Java资源大全

Java 几乎是许多程序员们的入门语言,并且也是世界上非常流行的编程语言。国外程序员 Andreas Kull 在其 Github 上整理了非常优秀的 Java 开发资源,推荐给大家。 译文由 ImportNew- 唐尤华翻...

李朝强 ⋅ 2015/11/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 59分钟前 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部