最近开始学习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"]
}
}
分享到:
- 2009-04-15 20:37
- 浏览 2555
- 评论(3)
- 论坛回复 / 浏览 (3 / 2417)
- 查看更多
相关推荐
在Java开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...
- **测试与隔离**:Groovy脚本可以作为独立的模块进行测试,避免了对Java代码的影响。 总的来说,Java调用Groovy并实时加载数据库中的Groovy脚本是一种强大而灵活的解决方案,特别适用于需要频繁调整业务逻辑或进行...
在Java中,Groovy是一个强大的脚本语言,它与Java语法兼容,并且可以无缝集成到Java应用程序中,使得动态代码执行变得更加便捷。Groovy提供了GroovyShell、GroovyScriptEngine和GroovyClassLoader等工具,允许我们...
JavaGroovy用Groovy更迅速地对Java代码进行单元测试软件测试不久以前,developerWorks的作者AndrewGlover撰写了一篇介绍的文章,该文章是alt.lang.jre系列的一部分,而Groovy是一个新提议的用于平台的标准语言。...
6. **Groovy与Java的互操作性**:Groovy与Java代码可以无缝地混编和交互,这使得既有Java项目可以轻松引入Groovy来提升生产力,同时保留现有的Java代码基础。 7. **动态语言的优势**:Groovy作为动态语言,提供了...
本文适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java开发人员。了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的...最重要的是,您将学会如何在日常 Java 应用程序开发中联合使用 Groovy 和 Java 代码
在这个目录下,我们可以期待找到如`src/main/java`、`src/test`等子目录,分别存放着Groovy的主代码和测试代码。每个子目录将进一步细化,按照包结构组织,例如`org.codehaus.groovy`,其中包含了Groovy的各个模块,...
1. **Groovy的简洁语法**:Groovy的语法比Java更加简洁,比如它允许省略括号、类型声明等,这使得代码更易读写。例如,方法调用可以不带括号,变量声明可以省略类型,如: ```groovy def sayHello() { println '...
- **定义**:Groovy是一种面向对象的编程语言,它直接运行在Java平台上,并且能够与现有的Java代码无缝集成。 - **特点**: - **语法简洁**:Groovy提供了更为简洁、动态的语法特性,使得编写代码变得更加高效。 -...
本文适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java开发人员。了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的...最重要的是,您将学会如何在日常 Java 应用程序开发中联合使用 Groovy 和 Java 代码。
总的来说,结合Groovy和Dubbo,开发者可以在不编写大量Java代码的情况下,快速实现功能迭代和系统扩展。这种方式特别适合敏捷开发和持续集成环境,能有效提升开发效率,降低维护成本。在实际项目中,我们可以利用...
这篇博客文章“Java调用Groovy”可能会探讨如何在Java代码中执行Groovy脚本,以及这样做的优势和实践方法。 首先,Java可以通过`GroovyShell`或`GroovyScriptEngine`来执行Groovy脚本。`GroovyShell`是Groovy提供的...
本文将详细讲解如何使用JVM动态执行Groovy脚本的方法,主要包括利用JShell执行代码、调试模式下动态执行代码以及利用javax.script包执行Groovy脚本。以下是对各知识点的详细说明。 1. 利用JShell执行代码 Java 9 ...
例如在服务器上执行 shell 命令、运行 python 或者 java 测试代码以及使用 groovy 脚本来实现一些更为复杂的功能等等。 执行 shell 命令 在 Jenkins Pipeline 中,使用 `sh` 指令可以执行 shell 命令。例如,使用 ...
Groovy是一种面向对象的、动态的、强大的脚本语言,它是Java平台上的一个组件,可以无缝地与Java代码集成。Groovy结合了Java的类型安全性和脚本语言的灵活性,使得开发者能够以更简洁、高效的代码实现复杂的任务。...
本文将详细介绍Groovy脚本在自动化测试中的应用,包括其核心概念、编程技巧和实际代码示例。 Groovy脚本语言以其轻量级、高效和可扩展性,在自动化测试领域中发挥着重要作用。从测试脚本编写到与Java的紧密集成,再...
Groovy是一种运行在Java平台上的动态脚本语言,它与Java紧密集成,提供了一种简洁、灵活的方式来编写Java代码。Groovy不仅支持静态类型检查,还可以在运行时动态地编译和执行代码,这使得它在Java平台中的应用场景...
Groovy代码可以直接与Java代码互操作,因为它们都被编译为Java字节码。这种兼容性使得Groovy成为Java开发者的理想选择,尤其是在需要快速原型、脚本编写或增强现有Java项目时。 二、语法特性 1. 更简洁的语法:...
Groovy不仅能在Java虚拟机(JVM)上运行,还能与现有的Java代码无缝集成,这使得Groovy成为Java生态系统中的一个强大补充。 ### 本书的核心知识点 #### 1. Groovy语言的基础语法 书中详细介绍了Groovy的基础语法,...
在测试中,可以使用 Spring 的 ApplicationContext 来获取 helloWorldService bean,并调用其 sayHello 方法,以验证 Groovy 脚本的正确性。 Groovy 在 Spring 中的使用可以带来许多好处,例如可以动态修改业务逻辑...