Welcome

首页 / 软件开发 / JAVA / 精通Grails - 使用Grails进行单元测试(单元测试提速)

精通Grails - 使用Grails进行单元测试(单元测试提速)2010-12-03 IBM Scott Davis在本期精通Grails中,Scott Davis 向您展示如何利用 Grails 中包含的 GrailsUnitTestCase 和 ControllerUnitTestCase 类的内置模拟功能。

Grails 支持两种基本的测试类型:单元测试和集成测试。两种测试的语法完 全相同:都被使用相同的断言编写为一个 GroovyTestCase。它们之间的区别在 于语义上。单元测试用于在隔离环境下测试类,而集成测试支持在完整的、正在 运行的环境中测试类。

该文章是根据当时最新的 Grails 1.0 版本编写的,在该版本中,测试基础 架构的功能得到了显著改进。GrailsUnitTestCase 类及其子类的引入将流程测 试的简单性和全面性提升到了一个全新的水平。具体来讲,这些新测试类的模拟 功能提升了单元测试的速度,同时能够像在集成测试中一样正常测试功能。图 1 展示了 Grails 1.1.x 中全新的测试层次结构:

图 1. Grails 1.1.x 中全新的测试层次结构

当您在下一节中创建一个新的域类和控制器时,您将了解如何实际应用 GrailsUnitTestCase 和 ControllerUnitTestCase。

开始

要执行本文中的示例,首先创建一个新应用程序。在命令提示符下键入:

grails create-app testing

更改到测试目录(cd testing),然后键入:

grails create-domain-class User

接下来键入:

grails create-controller User

将清单 1 中的代码添加到 grails-app/domain/User.groovy 中:

清单 1. User 域类

class User {
String name
String login
String password
String role = "user"

static constraints = {
name(blank:false)
login(unique:true, blank:false)
password(password:true, minSize:5)
role(inList:["user", "admin"])
}

String toString(){
"${name} (${role})"
}
}

定义 grails-app/controller/UserController.groovy 的核心行为,如清单 2 所示:

清单 2. UserController 类

class UserController {
def scaffold = true
}

现在基本的基础架构已经就绪了,接下来添加一些测试。