您的位置:首页 > 大数据 > 人工智能

精通 Grails排除 bug,构建可执行文档

2008-11-06 09:25 218 查看
Grails 可以轻松确保您的应用程序从始至终都远离 bug。这还有另一个好处,您可以利用测试代码生成一组通常是最新的可执行文档。本月
Grails 专家 Scott Davis 向您展示如何对 Grails 进行测试。
我是测试驱动开发(test-driven development,TDD)的大力支持者。Neal Ford(The Productive
Programmer
的作者)说道 “不测试所编写的代码就是失职”。Michael Feathers(Working Effectively
with Legacy Code
的作者)将 “遗留代码” 定义为没有经过相应测试的任何软件 —
这表明编写代码而不进行测试是一种过时的实践。我常说每编写一定数量的生产代码,就要编写两倍的测试代码。

精通 Grails 尚未讨论 TDD,因为到目前为止,这个系列主要关注如何利用 Grails
的核心功能。测试基础设施代码(不用您编写的代码)有一定的价值,但我很少这样做。我相信 Grails 能够正确地将我的 POGO 呈现为 XML,或在我调用
trip.save()
时将我的
Trip

保存到数据库。当您检查自己编写的代码时,测试的真正价值就体现出来了。如果您编写一个复杂的算法,您应该有一个或多个补充单元测试,确保该算法正常工作。在本文,您将看到
Grails 如何帮助和鼓励您进行应用程序测试。

编写第一个测试

在开始测试之前,我将介绍一个新的域类。这个类的一些定制功能必须经过测试才能进入到生产中。输入
grails
create-domain-class HotelStay
,如清单 1 所示:


关于本系列

Grails 是一种新型 Web 开发框架,它将常见的 Spring 和 Hibernate 等 Java™
技术与当前流行的约定优于配置等实践相结合。Grails 是用 Groovy 编写的,它可以提供与遗留 Java
代码的无缝集成,同时还可以加入脚本编制语言的灵活性和动态性。学习完 Grails 之后,您将彻底改变看待 Web
开发的方式。
清单 1. 创建
HotelStay


$ grails create-domain-class HotelStay

Environment set to development
[copy] Copying 1 file to /src/trip-planner2/grails-app/domain
Created Domain Class for HotelStay
[copy] Copying 1 file to /src/trip-planner2/test/integration
Created Tests for HotelStay
从清单 1 可以看到,Grails 在 grails-app/domain 目录中为您创建了一个空的域类。它还在 test/integration
目录中创建了一个带有空的
testSomething()
方法的
GroovyTestCase

类(稍后我将进一步讲述单元测试和集成测试的区别)。清单 2 展示了一个带有生成的测试的空
HotelStay
类:

清单 2. 带有生成的测试的空类

class HotelStay {
}

class HotelStayTests extends GroovyTestCase {
void testSomething() {
}
}
GroovyTestCase
是在 JUnit 3.x 单元测试之上的一层 Groovy。如果您熟悉 JUnit
TestCase
,您肯定知道
GroovyTestCase

是如何工作的。对于这两种情况,您通过断言代码正常工作来测试它们。JUnit 有各种不同的断言方法,包括
assertEquals
assertTrue
assertNull

等等。它使您通过编程的方式表明 “我断言这个代码按照预期工作”。


为什么是 JUnit 3.x 而不是 4.x?

由于历史原因,
GroovyTestCase
就是一个 JUnit 3.x
TestCase
。当
Groovy 1.0 于 2007 年 1 月发布时,它支持 Java 1.4 语言结构。它可以在 Java 1.4、1.5 和 1.6 JVM
上运行,但在语言级别上仅与 Java 1.4 兼容。

接下来 Groovy 的主要发布版是 1.5,在 2008 年 1 月发布。Groovy 1.5 支持所有 Java 1.5
语言特性,比如泛型、静态导入、
for
/
in
循环和注释(后者最值得讨论)。不过 Groovy 1.5
仍然可以在 Java 1.4 JVM 上运行。Groovy 开发团队许诺所有 Groovy 1.x 版本都将与 Java 1.4 保持向后兼容性。当
Groovy 2.x 发布时(可能是 2009 年末或 2010 年),它将不支持 Java 1.4。

因此,这些与
GroovyTestCase
打包的 JUnit 版本有什么关系呢?JUnit 4.x 引入了一些注释,比如
@test
@before
@after
。尽管这些新特性非常有趣,但
JUnit 3.x 仍然是
GroovyTestCase
向后兼容 Java 1.4 的基础。

这就是说,您完全可以使用 JUnit 4.x(参见 参考资料
获得 Groovy 站点相关文档的链接)。引入其他使用注释和 Java 5 语言特性的测试框架是完全有可能的(参见 参考资料 获得结合使用 TestNG 和 Groovy 的示例)。Groovy 的字节码与 Java
编程兼容,因此您可以通过 Groovy 使用任何 Java 测试框架。

将清单 3 中的代码添加到 grails-app/domain/HotelStay.groovy 和
test/integration/HotelStayTests.groovy:

清单 3.
一个简单的测试


本文转自IBM Developerworks中国

请点击此处查看全文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: