Grails 如何使用spock框架编写集成测试用例

Grails 如何使用spock框架编写集成测试用例,grails,spock,Grails,Spock,我正在使用Grails-2.4.4。我需要简单的步骤来使用Grails中的spock编写集成测试用例 我创建了一个示例应用程序,因为我只是在数据库中持久化一条记录。我想为此编写集成测试用例 有人能帮我吗。我同意@quindimildev的观点,即一旦给出一个示例域类,提供有用的信息会更容易,特别是如果有特定的东西需要测试的话。在那之前,我知道即使只是看到测试的开始也是有帮助的,所以这里有一个这样的例子: 假设有一个作者域类 class Author { Integer id St

我正在使用Grails-2.4.4。我需要简单的步骤来使用Grails中的spock编写集成测试用例

我创建了一个示例应用程序,因为我只是在数据库中持久化一条记录。我想为此编写集成测试用例


有人能帮我吗。

我同意@quindimildev的观点,即一旦给出一个示例域类,提供有用的信息会更容易,特别是如果有特定的东西需要测试的话。在那之前,我知道即使只是看到测试的开始也是有帮助的,所以这里有一个这样的例子:

假设有一个
作者
域类

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
您可以看到,保存后,您可以立即使用Gorm
count()
查询它


注意:
IntegrationSpec
类在Grails3中不再可用。相反,该类应该扩展
规范
(就像单元测试一样),并包含
@Integration
注释。

请在这里编写您的类代码,为您创建自定义测试。他使用Grails 2.4,所以他的集成测试必须扩展IntegrationSpec@loteq我添加了这条评论,以防有人稍后来看这个问题,因为对于一些人来说,从Grails2到Grails3的转换可能不是一个重大的改革。