【发布时间】:2015-11-14 02:16:18
【问题描述】:
我正在使用 Grails-2.4.4。我需要简单的步骤来使用 grails 中的 spock 编写集成测试用例。
我创建了一个示例应用程序,我只是将记录保存在数据库中。我想为此编写集成测试用例。
谁能帮帮我。
【问题讨论】:
-
请在此处写下您的类代码,为您创建自定义测试
我正在使用 Grails-2.4.4。我需要简单的步骤来使用 grails 中的 spock 编写集成测试用例。
我创建了一个示例应用程序,我只是将记录保存在数据库中。我想为此编写集成测试用例。
谁能帮帮我。
【问题讨论】:
我同意@quindimildev 的观点,一旦给出了示例域类,提供有用的信息会更容易——特别是如果有特定的东西需要测试。在那之前,我知道即使只是看到测试的开始也会很有帮助,所以这里有一个这样的例子:
假设有一个Author 域类
class Author {
Integer id
String screenName
static constraints = {
}
static mapping = {
cache usage: 'read-only' // No writes to the database
table 'exp_members'
id column: 'member_id'
screenName column: 'screen_name'
version false // Prevent a version column from being added to the database table
}
}
然后您可以进行如下所示的集成测试:
@TestFor(Author)
@Mock([Author])
class AuthorSpec extends Specification {
void "test"() {
when:
Author author = new Author(
screenName: "Jon Doe",
id: 1
).save(failOnError: true, flush: true)
then:
Author.count() == 1
}
}
以下是有关此测试的一些有用说明:
@TestFor(Author) 用于指定要模拟哪个对象,在本例中为Author 域类,但它也可以是控制器集成测试的控制器。
@Mock(Author) 表示应该模拟哪个域类,以及哪个域类可以应用 Gorm 方法。如果您有多个域对象要为此测试模拟,这也可以是一个数组。例如:@Mock([Author, Book])
.save(flush: true, failOnError: true) 非常适合用于伪造的持久条目。 flush: true 将确保条目立即保存并可用于您的测试。如果保存不正常,failOnError: true 将无法通过测试。如果您错过了一个约束,这将非常有帮助,如果没有这个,它将在稍后失败,并带有更神秘的消息。
Author.count() == 1可以看到保存后可以立即用Gormcount()查询。
注意:IntegrationSpec 类在 Grails 3 中不再可用。相反,该类应扩展 Specification(就像单元测试一样),并包含 @Integration 注释。
【讨论】: