享受 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 所示:
图 1. 用 Eclipse 运行 GroovyTestSuite
在图 2 中,您可以看到当点击 Arguments 标签,写入脚本的路径时,会发生了什么:
运行一个自己喜欢的 JUnit Groovy 脚本,实在是很简单,只要在 Eclipse 中找到对应的运行配置就可以了。