对 Groovy 进行单元测试
本教程一直都强调 Groovy 只是 Java 的一个变体。您已经看到可以用 Groovy 编写并使用标准的 Java 程序。为了最后一次证明这点,在结束本教程之前,我们将通过 JUnit 利用 Java 对 Song
类进行单元测试。
将 JUnit 加入 Eclipse 项目
为了跟上本节的示例,需要将 JUnit 加入到 Eclipse 项目中。首先,右键单击项目,选择 Build Path,然后选择 Add Libraries,如图 14 所示:
图 14. 将 JUnit 加入到项目的构建路径
会出现 Add Library 对话框,如图 15 所示。
图 15. 从库列表中选择 JUnit
选择 JUnit 并单击 Next 按钮。应该会看到如图 16 所示的对话框。选择 JUnit3 或 4 — 具体选择哪项全凭自己决定 — 并单击 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 进行单元测试相关推荐
- groovy语言单元测试(spock)
一.spock-groovy单元测试的五种情况 /** * 单元测试 * given: mock单测中指定mock数据,模拟入参 * when: 触发行为,比如调用指定方法或函数 * then ...
- groovy语法基础
转载自:http://www.ibm.com/developerworks/cn/education/java/j-groovy/j-groovy.html 使用 Groovy 的简单语法开发 Jav ...
- 快速学习Groovy
转自:http://www.ibm.com/developerworks/cn/education/java/j-groovy/ 关于本教程 如果现在有人要开始完全重写 Java,那么 Groovy ...
- 新学习的语言Groovy
什么是 Groovy? Groovy 是 JVM 的一个替代语言 -替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同.在编写新应用 ...
- Spock Primer 翻译
起因 最近要搞groovy介绍,准备做成一系列的东西,参考github上的计划. https://github.com/javahub/groovy_hello spock没有找到翻译文档,动手把最重 ...
- 精通Groovy_B 循环, 范围, 集合, 映射, 闭包, 类, UT
通过 Groovy 进行循环 同大多数脚本语言一样,Groovy 经常被宣传为生产力更高 的 Java 语言替代品. 更好.更短的循环 下面这种方法可以更好地感受 Groovy 缺乏类型的好处:首先, ...
- 怎么使用Groovy+Spock做单元测试?
1. 背景 平时我们写代码,免不了要进行一些测试,如果没有使用单元测试,对于简单的程序,我们可以写一个main方法,调试查看指定的方法是否符合预期:对于一个服务系统,我们可以使用PostMan等工具来 ...
- 基于Groovy的Spock单元测试框架入门指南
文章目录 1. Spock Primer 基本概念 1.1 对比Junit 1.2 Imports 1.3 Specification测试类 1.4 Fields 属性 1.5 Fixture Met ...
- Groovy单元测试
单元测试说明 spock是基于groovy的测试框架,spock本身集成了Mockito+junit的功能,并且可以springboot-test结合启动容器测试.静态方法和私有方法仍需要使用Powe ...
最新文章
- java程序设计pdf下载_Java程序设计(迟立颖) PDF扫描版[21MB]
- 基于音乐的脑机接口——采访Stefan Ehrlich 和 Kat Agres(上)
- android 拍照不能保存图片格式,Android 拍照后保存到手机里,在相册找不到
- Linux权限和进程管理、网络配置、任务调度(四)
- js 中location 的学习
- c语言无法打开源文件xx.h,VS2015 + Qt5.9.2开发中无法打开源文件“ui_*.h” 和 error MSB6006: “cmd.exe”已退出,代码为 3之解决办法。...
- GARFIELD@04-14-2005
- SAP ABAP Platform 1909最新版的 docker 镜像
- python网址太长_Python GUI-长链转短链
- 软考网络工程师学习笔记5-局域网与城域网(二)
- MCU新趋势—Cortex M0/M3/M4 行业应用主题研讨会
- 【科研】计算社会科学与复杂科学
- 使用calibre制作kindle电子书
- 虚拟串口VSPD和XCOM的下载+安装+使用
- QQ群 该页面暂时无法显示
- CF919C Seat Arrangements
- 超市收银软件测试自学,超市收银系统测试计划.doc
- MISRA-C 2020
- C++红与黑/蘑菇阵
- 遗传算法matlab_史上最强的MATLAB自学网站,你收藏了吗???
热门文章
- 算法技能树2-蓝桥杯-python实现测试次数(摔手机)-动态规划(DP)
- XSS注入之xss-labs
- linux学习一天一个命令(18)[lvs,vgs,pvs命令]
- 《通信原理》AM/DSBSC/SSB信号的调制与解调仿真
- Room 使用及初步分析
- 在Windows电脑上ae模板怎么用
- C# 自动转换为半角 (输入法半角/全角切换) 转载
- note-PythonCookbook-第十一章 网络与WEB编程
- mongodb不等于某个值_mongodb条件查询不等于
- [网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记