`
lsyong
  • 浏览: 5403 次
  • 性别: 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开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...

    java动态代码执行

    在Java中,Groovy是一个强大的脚本语言,它与Java语法兼容,并且可以无缝集成到Java应用程序中,使得动态代码执行变得更加便捷。Groovy提供了GroovyShell、GroovyScriptEngine和GroovyClassLoader等工具,允许我们...

    Java调用Groovy,实时动态加载数据库groovy脚本

    - **测试与隔离**:Groovy脚本可以作为独立的模块进行测试,避免了对Java代码的影响。 总的来说,Java调用Groovy并实时加载数据库中的Groovy脚本是一种强大而灵活的解决方案,特别适用于需要频繁调整业务逻辑或进行...

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

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

    包含groovy plugin tools, eclemma 测试覆盖率4

    6. **Groovy与Java的互操作性**:Groovy与Java代码可以无缝地混编和交互,这使得既有Java项目可以轻松引入Groovy来提升生产力,同时保留现有的Java代码基础。 7. **动态语言的优势**:Groovy作为动态语言,提供了...

    apache-groovy-sdk-3.0.9.zip

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

    groovy-src-1.8.5.zip_.bzrignore_Groovy_Java 8_groovy src_lowern

    在这个目录下,我们可以期待找到如`src/main/java`、`src/test`等子目录,分别存放着Groovy的主代码和测试代码。每个子目录将进一步细化,按照包结构组织,例如`org.codehaus.groovy`,其中包含了Groovy的各个模块,...

    java 动态脚本语言 精通 Groovy

    1. **Groovy的简洁语法**:Groovy的语法比Java更加简洁,比如它允许省略括号、类型声明等,这使得代码更易读写。例如,方法调用可以不带括号,变量声明可以省略类型,如: ```groovy def sayHello() { println '...

    Java Groovy

    - **定义**:Groovy是一种面向对象的编程语言,它直接运行在Java平台上,并且能够与现有的Java代码无缝集成。 - **特点**: - **语法简洁**:Groovy提供了更为简洁、动态的语法特性,使得编写代码变得更加高效。 -...

    apache-groovy-sdk-2.4.11

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

    基于groovy实现 java脚本动态编译、部署、发布;可以通过脚本直接调用dubbo接口.zip

    总的来说,结合Groovy和Dubbo,开发者可以在不编写大量Java代码的情况下,快速实现功能迭代和系统扩展。这种方式特别适合敏捷开发和持续集成环境,能有效提升开发效率,降低维护成本。在实际项目中,我们可以利用...

    Java调用Groovy

    这篇博客文章“Java调用Groovy”可能会探讨如何在Java代码中执行Groovy脚本,以及这样做的优势和实践方法。 首先,Java可以通过`GroovyShell`或`GroovyScriptEngine`来执行Groovy脚本。`GroovyShell`是Groovy提供的...

    JVM 动态执行Groovy脚本的方法

    本文将详细讲解如何使用JVM动态执行Groovy脚本的方法,主要包括利用JShell执行代码、调试模式下动态执行代码以及利用javax.script包执行Groovy脚本。以下是对各知识点的详细说明。 1. 利用JShell执行代码 Java 9 ...

    干货:Jenkins Pipeline调用shell、python、java、groovy脚本的正确使用姿势.doc

    例如在服务器上执行 shell 命令、运行 python 或者 java 测试代码以及使用 groovy 脚本来实现一些更为复杂的功能等等。 执行 shell 命令 在 Jenkins Pipeline 中,使用 `sh` 指令可以执行 shell 命令。例如,使用 ...

    Groovy in Action源代码

    Groovy是一种面向对象的、动态的、强大的脚本语言,它是Java平台上的一个组件,可以无缝地与Java代码集成。Groovy结合了Java的类型安全性和脚本语言的灵活性,使得开发者能够以更简洁、高效的代码实现复杂的任务。...

    Groovy脚本:Java平台自动化测试的灵活选择

    本文将详细介绍Groovy脚本在自动化测试中的应用,包括其核心概念、编程技巧和实际代码示例。 Groovy脚本语言以其轻量级、高效和可扩展性,在自动化测试领域中发挥着重要作用。从测试脚本编写到与Java的紧密集成,再...

    Groovy脚本:Java平台的动态编程利器

    Groovy是一种运行在Java平台上的动态脚本语言,它与Java紧密集成,提供了一种简洁、灵活的方式来编写Java代码。Groovy不仅支持静态类型检查,还可以在运行时动态地编译和执行代码,这使得它在Java平台中的应用场景...

    groovy

    Groovy代码可以直接与Java代码互操作,因为它们都被编译为Java字节码。这种兼容性使得Groovy成为Java开发者的理想选择,尤其是在需要快速原型、脚本编写或增强现有Java项目时。 二、语法特性 1. 更简洁的语法:...

    groovy programming(2006.12).pdf

    Groovy不仅能在Java虚拟机(JVM)上运行,还能与现有的Java代码无缝集成,这使得Groovy成为Java生态系统中的一个强大补充。 ### 本书的核心知识点 #### 1. Groovy语言的基础语法 书中详细介绍了Groovy的基础语法,...

    Groovy在Spring中的简单使用

    在测试中,可以使用 Spring 的 ApplicationContext 来获取 helloWorldService bean,并调用其 sayHello 方法,以验证 Groovy 脚本的正确性。 Groovy 在 Spring 中的使用可以带来许多好处,例如可以动态修改业务逻辑...

Global site tag (gtag.js) - Google Analytics