加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 16:58:02 所属栏目:大数据 来源:网络整理
导读:Grails 可以轻松确保您的应用程序从始至终都远离 bug。这还有另一个好处,您可以利用测试代码生成一组通常是最新的可执行文档。本月 Grails 专家 Scott Davis 向您展示如何对 Grails 进行测试。 我是测试驱动开发(test-driven development,TDD)的大力支持
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 有各种不同的断言方法,包括 assertEqualsassertTrueassertNull 等等。它使您通过编程的方式表明 “我断言这个代码按照预期工作”。

为什么是 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中国

?? ?? 请点击此处查看全文

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读