`
lsyong
  • 浏览: 5385 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

用groovy测试java代码

阅读更多
最近开始学习groovy,把以前java项目的单元测试用groovy改写了一部份,总结一些心得,跟大家交流一下。

这里只探讨业务层的测试。原来的测试封装了一个BaseServiceTest类,继承自spring提供的AbstractTransactionalDataSourceSpringContextTests。在onSetUpBeforeTransaction方法里通过dbunit把准备数据插入数据库。执行测试方法。回滚事务,在onTearDownAfterTransaction方法里通过dbunit删除准备数据。这个大家应该都很熟悉了。

用groovy写测试有几点要注意:
1. 我的测试都是在eclipse里面跑,需要在eclipse.ini里面加上-Dfile.encoding=UTF-8 。不然groovy文件里的中文会是乱码。
 
2.取消spring的bean dependency check。因为每个groovy类都实现了GroovyObject接口,都有setMetaClass方法,spring找不到metaClass这个bean会报错。如果你的测试类继承了AbstractTransactionalDataSourceSpringContextTests,调用setDependencyCheck(false)方法就行。

3.因为我们的测试类继承了自己的BaseServiceTest,所以不能继承groovy的GroovyTestCase类。但是我们又想用GroovyTestCase提供的验证方法,怎么办?
可以把GroovyTestCase提供的验证方法赋给父类的字段,比如
final shouldFail = new GroovyTestCase().&shouldFail

用groovy写测试,代码量比差不多是原来的60%-70%(行数少了,分号没了,默认public,getter/setter用./.=替代,等等),关键是可以当作学习groovy的练习,大家试试吧。

测试代码大致如下:
class DepartmentServiceTest extends BaseServiceTest{

	DepartmentService departmentService
	
	final shouldFail = new GroovyTestCase().&shouldFail
	
	//测试新建部门,当名称为空应该抛出异常
	void testAddDepartmentFailBecauseNameEmpty() {
		shouldFail(BusinessException){
			departmentService.saveOrUpdate(new Department())
		}
	}
	
	//测试新建部门,当名称重复应该抛出异常
	void testAddDepartmentFailBecauseNameExist() {
		Department department = new Department()
		department.name = "人力资源"
		shouldFail(BusinessException){
			departmentService.saveOrUpdate(department)
		}
	}
	
	String[] getDataSetFileNames(){
		["department.xml"]
	}
	
}

分享到:
评论
3 楼 lsyong 2009-04-17  
1.是的,实际上我是加了个父类,不过这里举例就写在子类上了。

2.嗯,用dbunit。

3.确实不丰满,呵呵,光想说明简单了。

4.不会,只是不做依赖检查了。
2 楼 seemoon 2009-04-17  
1.
final shouldFail = new GroovyTestCase().&shouldFail 
这个在BaseServiceTest中定义更好,否则每个Test类都定义比较累人。

2. 
String[] getDataSetFileNames(){ 
         ["department.xml"] 
  }
用的dbunit?

3.
例子还太单薄,没能展现用和不用groovy的便利性,多贴几个会丰满一点

4.setDependencyCheck(false)
是否会影响其他装配?
1 楼 JohnnyJian 2009-04-15  
groovy+gmock是测试java代码的最佳组合^_^

相关推荐

    java动态代码执行

    基于groovy框架,进行的简单java动态代码执行;附件中包含java调用groovy具体的代码实现,及测试方法。

    apache-groovy-sdk-2.4.11

    本文适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java开发人员。了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的...最重要的是,您将学会如何在日常 Java 应用程序开发中联合使用 Groovy 和 Java 代码。

    用Groovy更迅速地对Java代码进行单元测试

    JavaGroovy用Groovy更迅速地对Java代码进行单元测试软件测试不久以前,developerWorks的作者AndrewGlover撰写了一篇介绍的文章,该文章是alt.lang.jre系列的一部分,而Groovy是一个新提议的用于平台的标准语言。...

    apache-groovy-sdk-3.0.9.zip

    本文适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java开发人员。了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的...最重要的是,您将学会如何在日常 Java 应用程序开发中联合使用 Groovy 和 Java 代码

    Java/groovy脚本程序调用被测试应用bean

    脚本通过上下文applicationcontext获取被测试应用bean,从而可以进行接口内容获取等操作。目前该方式主要运用到性能平台脚本搭建、代码深度测试、接口测试、白盒测试等多方面。...支持Java、groovy脚本。

    JAVA上百实例源码以及开源项目源代码

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    Java groovy内存回收测试步骤解析

    主要介绍了Java groovy内存回收测试步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    groovy2.4.3

    是一个基于Java虚拟机的敏捷动态语言。 构建在强大的Java语言之上 并添加了从Python,Ruby和Smalltalk等语言中学到的诸多特征。...直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。

    java开源包8

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    Java测试框架Spock.zip

    Spock 是适合 Java 和 Groovy 应用程序的一个测试框架。示例代码:import groovy.sql.Sqlimport spock.lang.*class DatabaseDriven extends Specification { @Shared sql = Sql.newInstance("jdbc:h2:mem:", "org....

    java、groovy、C#、Javascript性能比较

    java、groovy、C#、Javascript的运行效率到底如何? 通过实验比较,Javascript的运行效率解决java,看来基于javascript的html5前途远大。 C#的Release版的运行性能也相当高,和C++相差...文件内部包含测试代码,供参考

    alioth-groovy2

    Groovy通过几乎零的学习曲线使Java开发人员可以使用现代编程功能,并支持特定领域语言和其他紧凑语法,因此您的代码变得易于阅读和维护。 Groovy凭借其强大的处理原语,OO能力和Ant DSL,使编写Shell和构建脚本变...

    groovy-embedding:使用具有可重装功能的GroovyScriptEngine进行Groovy嵌入的示例测试

    这是一个示例,探讨了将groovy与Java代码集成的方法,以期通过使用groovy功能并动态加载更改来实现快速原型制作。 这个想法是要运行该应用程序,并以Groovy的方式进行原型设计,使该应用程序运行,并可以选择将运行...

    Making-Java-Groovy:曼宁的书“ Making Java Groovy”的源代码-java source code

    肯·库森(Ken Kousen)的《的源代码 ... 大多数使用自己的自述文件来描述如何使用Gradle进行构建和测试。 完成其他章节后,将在此处添加其代码。 如有任何疑问或意见,请发送至: 肯·库森()

    java开源包7

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包10

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    GROOVY入门经典

    Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。 ...

Global site tag (gtag.js) - Google Analytics