我正在使用Grails-2.4.4。我需要使用简单的步骤在grails中使用spock编写集成测试用例。
我创建了一个示例应用程序,因为我只是在数据库中保存记录。我想为此编写集成测试用例。
任何人都可以帮助我。
答案 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>