现在的位置: 首页 > 综合 > 正文

对 Groovy 进行单元测试

2018年08月07日 ⁄ 综合 ⁄ 共 1947字 ⁄ 字号 评论关闭
 

本教程一直都强调 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:

@Test
public 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 中也都可以使用。

【上篇】
【下篇】

抱歉!评论已关闭.