本教程一直都强调 Groovy 只是 Java 的一个变体。您已经看到可以用 Groovy 编写并使用标准的 Java 程序。为了最后一次证明这点,在结束本教程之前,我们将通过 JUnit 利用 JavaSong 类进行单元测试。

将 JUnit 加入 Eclipse 项目

为了跟上本节的示例,需要将 JUnit 加入到 Eclipse 项目中。首先,右键单击项目,选择 Build Path,然后选择 Add Libraries,如图 14 所示:

图 14. 将 JUnit 加入到项目的构建路径

会出现 Add Library 对话框,如图 15 所示。

图 15. 从库列表中选择 JUnit

选择 JUnit 并单击 Next 按钮。应该会看到如图 16 所示的对话框。选择 JUnit34 — 具体选择哪项全凭自己决定 — 并单击 Finish 按钮。

图 16. 选择 JUnit 3 或 JUnit 4


设置新的测试用例

现在在项目的类路径中加入了 JUnit,所以能够编写 JUnit 测试了。请右键单击 java 源文件夹,选择 New,然后选择 JUnit Test Case。定义一个包,给测试用例命名(例如 SongTest),在 Class Under Test 部分,单击 Browse 按钮。

请注意,可以选择用 Groovy 定义的 Song 类。图 17 演示了这一步骤:

图 17.找到 Song 类

选择该类并单击 OK(应该会看到与图 18 类似的对话框)并在 New JUnit Test Case 对话框中单击 Finish 按钮。

图 18. Song 的新测试用例


定义测试方法

我选择使用 JUnit 4;所以我定义了一个名为 testToString() 的测试方法,如下所示:

package org.acme.groovy;

import org.junit.Test;

public class SongTest {

 @Test public void testToString(){}

}

测试 toString

显然,需要验证 toString() 方法是否没有问题,那么第一步该做什么呢?如果想的是 “导入 Song 类”,那么想得就太难了 — Song 类在同一个包内,所以第一步是创建它的实例。

在创建用于测试的 Song 实例时,请注意不能通过传给构造函数的映射完全初始化 — 而且,如果想自动完成实例的 setter 方法,可以看到每个 setter 接受的是 Object 而不是 String(如图 19 所示)。为什么会这样呢?

图 19. 所有的 setter 和 getter


Groovy 的功劳

如果回忆一下,就会记得我在本教程开始的时候说过:

因为 Java 中的每个对象都扩展自 java.lang.Object,所以即使在最坏情况下,Groovy 不能确定变量的类型,Groovy 也能将变量的类型设为 Object然后问题就会迎刃而解。

现在回想一下,在定义 Song 类时,省略了每个属性的类型。Groovy 将自然地将每个属性的类型设为 Object。所以,在标准 Java 代码中使用 Song 类时,看到的 getter 和 setter 的参数类型和返回类型全都是 Object


修正返回类型

为了增添乐趣,请打开 Groovy Song 类,将 artist 属性改为 String 类型,而不是无类型,如下所示:

package org.acme.groovy

class Song { def name String artist def genre

 String toString(){  "${name}, ${artist}, ${getGenre()}" }

 def getGenre(){  genre?.toUpperCase() }}

现在,回到 JUnit 测试,在 Song 实例上使用自动完成功能 — 看到了什么?

在图 20 中(以及您自己的代码中,如果一直跟随本教程的话),setArtist() 方法接受一个 String而不是 Object。Groovy 再次证明了它就是 Java,而且应用了相同的规则。

图 20. String,而不是 object


始终是普通的 Java

返回来编写测试,另外请注意,默认情况下 Groovy 编译的类属性是私有的,所以不能直接在 Java 中访问它们,必须像下面这样使用 setter:

@Testpublic void testToString(){ Song sng = new Song(); sng.setArtist("Village People"); sng.setName("Y.M.C.A"); sng.setGenre("Disco");

 Assert.assertEquals("Y.M.C.A, Village People, DISCO",    sng.toString());}

编写这个测试用例余下的代码就是小菜一碟了。测试用例很好地演示了这样一点:用 Groovy 所做的一切都可以轻易地在 Java 程序中重用,反之亦然。用 Java 语言执行的一切操作和编写的一切代码,在 Groovy 中也都可以使用。

对 Groovy 进行单元测试相关推荐

  1. groovy语言单元测试(spock)

    一.spock-groovy单元测试的五种情况 /**  * 单元测试  * given: mock单测中指定mock数据,模拟入参  * when: 触发行为,比如调用指定方法或函数  * then ...

  2. groovy语法基础

    转载自:http://www.ibm.com/developerworks/cn/education/java/j-groovy/j-groovy.html 使用 Groovy 的简单语法开发 Jav ...

  3. 快速学习Groovy

    转自:http://www.ibm.com/developerworks/cn/education/java/j-groovy/ 关于本教程 如果现在有人要开始完全重写 Java,那么 Groovy ...

  4. 新学习的语言Groovy

    什么是 Groovy? Groovy 是 JVM 的一个替代语言 -替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同.在编写新应用 ...

  5. Spock Primer 翻译

    起因 最近要搞groovy介绍,准备做成一系列的东西,参考github上的计划. https://github.com/javahub/groovy_hello spock没有找到翻译文档,动手把最重 ...

  6. 精通Groovy_B 循环, 范围, 集合, 映射, 闭包, 类, UT

    通过 Groovy 进行循环 同大多数脚本语言一样,Groovy 经常被宣传为生产力更高 的 Java 语言替代品. 更好.更短的循环 下面这种方法可以更好地感受 Groovy 缺乏类型的好处:首先, ...

  7. 怎么使用Groovy+Spock做单元测试?

    1. 背景 平时我们写代码,免不了要进行一些测试,如果没有使用单元测试,对于简单的程序,我们可以写一个main方法,调试查看指定的方法是否符合预期:对于一个服务系统,我们可以使用PostMan等工具来 ...

  8. 基于Groovy的Spock单元测试框架入门指南

    文章目录 1. Spock Primer 基本概念 1.1 对比Junit 1.2 Imports 1.3 Specification测试类 1.4 Fields 属性 1.5 Fixture Met ...

  9. Groovy单元测试

    单元测试说明 spock是基于groovy的测试框架,spock本身集成了Mockito+junit的功能,并且可以springboot-test结合启动容器测试.静态方法和私有方法仍需要使用Powe ...

最新文章

  1. java程序设计pdf下载_Java程序设计(迟立颖) PDF扫描版[21MB]
  2. 基于音乐的脑机接口——采访Stefan Ehrlich 和 Kat Agres(上)
  3. android 拍照不能保存图片格式,Android 拍照后保存到手机里,在相册找不到
  4. Linux权限和进程管理、网络配置、任务调度(四)
  5. js 中location 的学习
  6. c语言无法打开源文件xx.h,VS2015 + Qt5.9.2开发中无法打开源文件“ui_*.h” 和 error MSB6006: “cmd.exe”已退出,代码为 3之解决办法。...
  7. GARFIELD@04-14-2005
  8. SAP ABAP Platform 1909最新版的 docker 镜像
  9. python网址太长_Python GUI-长链转短链
  10. 软考网络工程师学习笔记5-局域网与城域网(二)
  11. MCU新趋势—Cortex M0/M3/M4 行业应用主题研讨会
  12. 【科研】计算社会科学与复杂科学
  13. 使用calibre制作kindle电子书
  14. 虚拟串口VSPD和XCOM的下载+安装+使用
  15. QQ群 该页面暂时无法显示
  16. CF919C Seat Arrangements
  17. 超市收银软件测试自学,超市收银系统测试计划.doc
  18. MISRA-C 2020
  19. C++红与黑/蘑菇阵
  20. 遗传算法matlab_史上最强的MATLAB自学网站,你收藏了吗???

热门文章

  1. 算法技能树2-蓝桥杯-python实现测试次数(摔手机)-动态规划(DP)
  2. XSS注入之xss-labs
  3. linux学习一天一个命令(18)[lvs,vgs,pvs命令]
  4. 《通信原理》AM/DSBSC/SSB信号的调制与解调仿真
  5. Room 使用及初步分析
  6. 在Windows电脑上ae模板怎么用
  7. C# 自动转换为半角 (输入法半角/全角切换) 转载
  8. note-PythonCookbook-第十一章 网络与WEB编程
  9. mongodb不等于某个值_mongodb条件查询不等于
  10. [网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记