实战groovy -第二部分

享受 GroovyTestCase 的快乐

了解 GroovyTestCase 的能力最好的办法,莫过于实际看到它的效果。在清单 3 中,我已经编写了一个新的 SimpleFilterTest,但是这次我要扩展 GroovyTestCase 来实现它:

清单 3. 一个真正的 GroovyTestCase

import groovy.util.GroovyTestCase

import com.vanward.sedona.frmwrk.filter.impl.SimplePackageFilter

class SimpleFilterTest extends GroovyTestCase {

        

  void testSimpleJavaPackage() {

    fltr = new SimplePackageFilter()

    fltr.setFilter(“java.”)                

    val = fltr.applyFilter(“java.lang.String”)              

    assertEquals(“value should be true”, true, val)

  }     

}

 

请注意,可以通过命令行来运行该测试套件,没有运行基于 Java 的 JUnit 测试套件所需要的 main() 方法。实际上,如果我用 Java 代码编写上面的 SimpleFilterTest,那么代码看起来会像清单 4 所示的那样:

清单 4.  Java 代码编写的同样的测试用例

import junit.framework.TestCase;

import com.vanward.sedona.frmwrk.filter.Filter;

import com.vanward.sedona.frmwrk.filter.impl.SimplePackageFilter;

public class SimplePackageFilterTest extends TestCase {      

   public void testSimpleRegex() {

         Filter fltr = new SimplePackageFilter();

         fltr.setFilter(“java.”);

         boolean val = fltr.applyFilter(“java.lang.String”);

         assertEquals(“value should be true”, true, val);

   }

        

   public static void main(String[] args) {

         junit.textui.TestRunner.run(SimplePackageFilterTest.class);

   }

}

 

用断言进行测试

除了可以让您通过命令行运行测试之外, GroovyTestCase 还向您提供了一些特别方便的 assert 方法。例如, assertArrayEquals,它可以检查两个数据中对应的每一个值和各自的长度,从而断言这两个数据是否相等。从清单 5 的示例开始,就可以看到 Groovy 断言的实际效果,清单 5 是一个简洁的基于 Java 的方法,它把 string 分解成数组。(请注意,我可能使用了 Java 1.4 中新添加的 string 特性编写以下的示例类。我采用 Jakarta Commons StringUtils 类来确保与 Java 1.3 的后向兼容性。)

清单 5. 定义一个 Java StringSplitter 

import org.apache.commons.lang.StringUtils;

public class StringSplitter {

  public static String[] split(final String input, final String separator){

   return StringUtils.split(input, separator);

  }

}

 

清单 6 展示了用 Groovy 测试套件及其对应的 assertArrayEquals 方法对这个类进行测试是多么简单:

清单 6. 使用 GroovyTestCase  assertArrayEquals 方法

import groovy.util.GroovyTestCase

import com.vanward.resource.string.StringSplitter

class StringSplitTest extends GroovyTestCase {

        

  void testFullSplit() {

    splitAr = StringSplitter.split(“groovy.util.GroovyTestCase”, “.”)         

    expect = [“groovy”, “util”, “GroovyTestCase”].toArray()

    assertArrayEquals(expect, splitAr)             

  }     

}

其他方法

Groovy 可以让您单独或成批运行测试。使用 GroovyTestCase 扩展,运行单个测试毫不费力。只要运行 groovy 命令,后面跟着要运行的测试套件即可,如清单 7 所示:

清单 7. 通过 groovy 命令运行 GroovyTestCase 测试用例

$./groovy test/com/vanward/sedona/frmwrk/filter/impl/SimpleFilterTest.groovy

.

Time: 0.047

OK (1 test)

 

Groovy 还提供了一个标准的 JUnit 测试套件,叫作 GroovyTestSuite。只要运行该测试套件,把脚本的路径传给它,它就会运行脚本,就像 groovy 命令一样。这项技术的好处是,它可以让您在 IDE 中运行脚本。例如,在 Eclipse 中,我只是为示例项目建立了一个新的运行配置(一定要选中 “Include external jars when searching for a main class”),然后找到主类groovy.util.GroovyTestSuite,如图 1 所示:

scrumcn1255755045
 1.  Eclipse 运行 GroovyTestSuite

在图 2 中,您可以看到当点击 Arguments 标签,写入脚本的路径时,会发生了什么:

scrumcn1255755066
 2.  Eclipse 中指定脚本的路径

运行一个自己喜欢的 JUnit Groovy 脚本,实在是很简单,只要在 Eclipse 中找到对应的运行配置就可以了。

火爆 售票中
Scrum.Org 主办
搜索
近期公开班
scrum alliance csm认证徽章
12月14-15日 (周六、周日)
Scrum Master (CSM) 中文认证课
远程
Lance Zhang 张宁宁 授课
专业Scrum Master (PSM I) 认证徽章
12月19-20日(周四、周五)
专业Scrum Master (PSM I) 认证公开课
远程
Derek Ding 丁志润 授课
Scrum.org专业Scrum产品负责人(PSPO)认证徽章
1月4-5日 (周六、周日)
专业Scrum产品负责人(PSPO)中文认证公开课
远程
Derek Ding 丁志润 授课
领导大规模敏捷Leading SAFe认证徽章
1月11-12日(周六、周日)
Leading SAFe领导大规模敏捷认证课
远程
Scott Wang 王庆付 授课
safe scrum master ssm
2月22-23日(周六、周日)
SAFe ScrumMaster 官方认证公开班
远程
Eric Liao 廖靖斌 授课
大规模敏捷顾问SAFe SPC认证课徽章
11月2-5日(周六-周二)
SAFe认证-SPC SAFe认证培训师导师班
上海-面授
Marsha Xue , Alex Guan 授课
safe scrum master ssm
8月10-11日
SAFe ScrumMaster 官方认证公开班
Eric Liao 廖靖斌 授课
scrum alliance csm认证徽章
11月09-10日
Scrum Master (CSM) 中文认证课
Lance Zhang 授课
scrum alliance csm认证徽章
10月26-27日
Scrum Master (CSM) 中文认证课
中文远程
Scott Dunn & Eric Liao 授课
领导大规模敏捷Leading SAFe认证徽章
10月19-20日
Leading SAFe领导大规模敏捷认证课
Eric Liao 廖靖斌 授课
Scrum联盟acsm认证徽章
10月19-20日
高级Scrum Master(A-CSM)认证公开课
Jim Wang 王军 授课
0
0
小时
0
分钟
0
由Scrum.org主办的 2024中国Scrum大会 8月17日将在上海开幕
0
0
小时
0
分钟
0
预约回电
留下您的手机号,我们会在第一时间联系您。
热线电话:400-696-6280
预约回电
预约成功,我们会尽快联系您。