`
wh870712
  • 浏览: 40625 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

使用Groovy简化单元测试

阅读更多
单元测试的重要性怎么强调都不为过。在进入正题之前,还是先罗嗦一下单元测试的重要性。

首先,单元测试能够解耦合。这一点不是单元测试的目的,但却是单元测试的结果。为什么呢?因为为了能够使代码能够测试、便于测试,需要将被测试代码与其它代码分离。这样,就必须就导致了被测试代码与其它代码的解耦合。无形中也提高了代码的可测试性。

其次,单元测试是重构的基础。没有单元测试,就没有重构。任何人都不敢对没有测试代码的代码进行修改,因为不能确定所作出的修改是否有副作用(无形中引入bug)。

第三,单元测试能够优化设计。为什么这样说呢?因为单元测试首先考虑的类和方法的外部特性。也就是从接口使用者的角度来分析和解决问题。这样就能防止过度设计,同时也会使接口易于使用。

最后,单元测试是一份准确的文档。单元测试能够保证及时更新,与代码同步。与代码不同步的文档比没有文档的情况更加糟糕。单元测试的代码是可运行的,测试代码是产品代码接口使用方法的最佳示例。

说了这么多,单元测试这么好,这么重要,为什么很多人都没有付诸实践呢?单元测试代码不是产品代码!单元测试不能带来新的特性。单元测试的编写占用了开发产品代码的时间,降低了生产率。

其实,JUnit框架是一个非常简单、易用的测试框架。使用它可以很轻松的编写出单元测试代码。今天,就来介绍一个更简单的编写单元测试的方法——使用groovy进行单元测试。

Groovy是运行在jvm上的面向对象的动态脚本语言。最大的特点就是能够和java进行相互调用。由于Groovy语法的简单和灵活性,能够帮助简化单元测试的编写。

下面就来介绍使用Groovy进行单元测试的方法。

Groovy的单元测试是基于JUnit的,所以在类路径中需要引入相关的Junit.jar。而Groovy的相关类则包含自Groovy语言本身的类库中。使用Groovy进行单元测试,需要继承自 GroovyTestCase类。同样的,它也可以定义setUp()和tearDown()方法来初始化和清除测试环境。在测试内部,可以像JUnit 一样使用断言来判断期望值与真实值是否相等,当然Groovy提供了相应的断言方法。

下面就来看一个简单的例子。

本示例采用测试驱动开发的方法,首先编写测试:

1. public class HelloTest extends GroovyTestCase{ 
2.     @Test 
3.     public void testToString(){ 
4.         def h = new Hello("prince"); 
5.         assertEquals("hello prince",h.toString()); 
6.     } 
7. }  

这是一段groovy的代码,定义了一个Hello类型,并且当构造函数参数为“prince”时,希望这该对象的toString()方法能够返回“hello prince”。

接下来,编写产品代码,定义Hello类,首先toString()方法。注意,产品代码可以是java的,也可以是groovy的。这里使用groovy编写产品代码。如下:

1. public class Hello{ 
2.  
3.     private def _info 
4.      
5.     public Hello(def info){ 
6.         _info = info 
7.     } 
8.     String toString(){ 
9.         return "hello ${_info}" 
10.     } 
11. }  

很简单的代码,当然测试也会很轻易的通过。其实,对于这种比较简单的问题,groovy与java的解决方案是差不多的。但在Mock Object方面,groovy更胜一筹。

java的mock解决方案比较流行的有easymock和jMock。对于easymock,如果需要mock类而不是接口,则需要引入easymockclassextension.jar。在groovy中,使用gmock会简单的多。

关于GMock的使用,有两种方法。一是直接继承自GMockTestCase,二是在类上使用@WithGMock注解。GMock使用闭包来简化操作。下面给出简单示例:

1. @WithGMock 
2. public class NewTest extends GroovyTestCase{ 
3.     @Test 
4.     public void testMock(){ 
5.         def gmc = new GMockController() 
6.         def mockLoader = gmc.mock() 
7.                 mockLoader.load('key').returns('value') 
8.                 gmc.play { 
9.                   assertEquals "value", mockLoader.load('key') 
10.                 } 
11.     } 
12. }  

现在,关于单元测试有了一种新的解决方案。很多公司由于各种原因需要使用java进行开发,如果想简化单元测试或者是groovy语言的美妙,使用groovy作为单元测试的解决方案不失为一个好的选择。
分享到:
评论

相关推荐

    android 单元测试

    在Android开发中,单元测试是确保代码质量、可维护性和减少缺陷的重要环节。它允许开发者对应用程序中的每个小部分(即“单元”)进行独立测试,以验证它们按预期工作。下面将详细介绍Android单元测试的相关知识点,...

    groovy 1.7官方教程

    - **测试指南**:详细介绍如何使用Groovy进行单元测试、集成测试等。 - **开发者指南**:为开发者提供深入的技术文档,包括API文档、构建过程等。 - **Cookbook**:包含一系列实用的代码片段和示例,帮助开发者快速...

    groovy脚本执行工具.zip

    在测试领域,Groovy常用于自动化测试,例如在持续集成(CI)/持续部署(CD)流程中,通过编写Groovy脚本来执行各种测试任务,如单元测试、集成测试和端到端测试。由于Groovy的灵活性,它也常被用于编写复杂的测试...

    groovy in action.pdf

    单元测试是软件开发不可或缺的一部分,Groovy提供了强大的单元测试框架,这部分内容介绍了如何利用Groovy进行高效的单元测试。 #### Groovy在Windows上的应用 虽然Groovy主要运行在Java平台上,但它在Windows操作...

    Groovy and Grails Recipes.pdf

    - **简洁性**:Groovy简化了许多Java中的冗余语法,如无需显式声明变量类型。 - **扩展性**:Groovy允许开发者通过元编程来扩展现有类的功能。 **2. Groovy语法基础** - **变量声明**:Groovy中的变量声明不需要...

    实战groovy.rar

    5. 测试与调试:掌握Spock测试框架,进行单元测试和集成测试。 6. 深入理解Groovy与Java的互操作性,以便在既有Java项目中无缝引入Groovy。 五、实战项目实践 通过实际项目,将理论知识应用于解决具体问题,如构建...

    Groovy.in.Action.2nd.Edition.pdf

    同时,Groovy也支持测试框架如Spock,能够进行更有效的单元测试。 8. 核心库和生态系统:Groovy提供了大量的核心库支持,比如GroovyFX用于富客户端应用开发,Gradle作为构建工具,GContracts进行代码约定检查,...

    groovy常用Script

    8. **测试**:`qe_normal_method_test.groovy` 可能包含了测试代码,Groovy支持JUnit和其他测试框架,可以方便地编写单元测试和集成测试。 9. **类和对象**:虽然文件名没有直接体现,但在Groovy中,你可以创建类和...

    groovy+in+action

    - **单元测试**:Groovy支持多种单元测试框架,如JUnit、Spock等,提供了更简洁的测试语法。 #### 四、结语 《Groovy in Action》这本书不仅包含了Groovy的基础知识,还深入探讨了许多高级主题。无论是希望快速...

    ADF_Groovy(1)

    在ADF BC中,我们可以利用Groovy来创建单元测试和集成测试,确保业务逻辑的正确性。 6. **提升性能** 虽然Groovy是动态语言,但它的JVM集成意味着它的性能接近Java。在ADF BC中,这意味着我们可以利用Groovy的效率...

    Grails&Groovy学习资料

    6. 测试驱动开发(TDD):Grails支持单元测试、集成测试和行为驱动开发(BDD),学习如何编写测试用例。 7. 调试和优化:理解如何在Grails应用中定位和修复问题,以及性能调优技巧。 "Grails&Groovy参考资料"这个...

    Groovy in action

    - **第14章:使用Groovy进行单元测试**:讲述了如何使用Groovy进行单元测试,包括常用的测试框架和工具。 - **第15章:Groovy在Windows上的应用**:探讨了Groovy在Windows环境下的安装、配置及使用。 - **第16章:...

    groovy+spring在web中的应用

    2. **Spock测试**:Spock是Groovy的一个强大的测试框架,它可以用于Spring应用的单元测试和集成测试。Spock的规范语法使得测试代码更加易读,同时提供了丰富的匹配器和断言,使测试编写更为便捷。 3. **AOP(面向切...

    groovy2.4.3

    是一个基于Java虚拟机的敏捷动态语言。...支持单元测试和模拟(对象),可以简化测试。 无缝集成 所有已经存在的 Java对象和类库。 直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。

    Groovy User Guide

    - **应用场景:** Groovy 可用于开发 Web 应用、构建脚本、编写单元测试等。 2. **高级使用指南 (Advanced Usage Guide)** - **内容:** 介绍了 Groovy 的高级特性,如闭包、元编程、DSL 构建等。 - **适用人群...

    Myeclipse Groovy 插件

    5. **测试框架集成**:支持Spock等Groovy测试框架,方便编写和运行单元测试。 6. **集成构建工具**:可能与Gradle或Grails等构建工具集成,简化项目构建和依赖管理。 总的来说,MyEclipse Groovy插件旨在为Java...

    Groovy学习笔记

    - **动态语言特性**:可以用来脚本化Java对象,编写模版,创建单元测试用例等。 #### 五、Groovy工具介绍 - **Groovy**: 运行Groovy脚本文件。 - **Groovyc**: 编译Groovy脚本到Java字节码。 - **Groovysh**: ...

    groovy grails简介

    6. **测试友好**:Grails鼓励TDD(测试驱动开发),提供了全面的测试支持,包括单元测试、集成测试和功能测试。 在"技术文章-Groovy和Grails简介.htm"这篇文档中,可能涵盖了以下内容: - Groovy的基本语法介绍,如...

    Groovy 2 Cookbook

    这本书通过实践操作的方式介绍了 Groovy 2 的强大功能,并且涵盖了多个方面,包括但不限于:脚本编写、单元测试、Web 开发、数据库交互等。 #### 三、Groovy 2 的主要特性 1. **性能提升**: - Groovy 2 相对于...

Global site tag (gtag.js) - Google Analytics