【问题标题】:How to write integration test cases using spock framework如何使用 spock 框架编写集成测试用例
【发布时间】:2015-11-14 02:16:18
【问题描述】:

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

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

谁能帮帮我。

【问题讨论】:

  • 请在此处写下您的类代码,为您创建自定义测试

标签: grails spock


【解决方案1】:

我同意@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 注释。

【讨论】:

  • 他使用 Grails 2.4,所以他的集成测试确实必须扩展 IntegrationSpec
  • @loteq 我添加了评论以防有人后来出现并正在查看这个问题,因为对于某些人来说,从 Grails 2 切换到 Grails 3 是一次重大改革可能并不明显。
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
相关资源
最近更新 更多