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

时间:2015-11-13 04:38:01

标签: grails spock

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

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

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:2)

我同意@quindimildev,一旦给出了一个示例Domain类,就会更容易提供有用的信息 - 特别是如果有特定的东西需要测试。在那之前,我知道它甚至只是为了看到测试的开始是有帮助的,所以这里有一个这样的例子:

我们假设有一个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您可以看到保存后,您可以使用Gorm count()立即查询。

注意:Grails 3中不再提供IntegrationSpec类。相反,该类应扩展Specification(就像单元测试一样),并包含@Integration注释。< / p>