自从大约4个月前开始现在的工作以来,我对Grails并不熟悉它的测试功能。几个星期前训练我测试的人离开了我们小组,现在我自己进行测试。我发现减速的方法是,我接受过如何进行Grails集成测试的培训方式几乎完全不同于我在论坛和支持小组中看到人们做的方式。我真的可以使用哪种方式是正确/最好的。我目前正在使用Grails 2.4.0,顺便说一句。
以下是我受过训练的样式的集成测试的示例模型。这是我应该做的正确甚至是最好的方式吗?
@Test
void "test a method in a controller"() {
def fc = new FooController() // 1. Create controller
fc.springSecurityService = [principal: [username: 'somebody']] // 2. Setup Inputs
fc.params.id = '1122'
fc.create() // 3. Call the method being tested
assertEquals "User Not Found", fc.flash.errorMessage // 4. Make assertions on what was supposed to happen
assertEquals "/", fc.response.redirectUrl
}
答案 0 :(得分:18)
自从使用Grails 2.4.0以来,您可以利用默认情况下使用spock framework的好处。
Here 是样本单元测试用例,您可以在编写集成规范后进行建模。
注意:强>
test/integration
IntegrationSpec
。@TestFor
未被使用。def myService
将注入该服务
规格。以上规格应如下:
import grails.test.spock.IntegrationSpec
class FooControllerSpec extends IntegrationSpec {
void "test a method in a controller"() {
given: 'Foo Controller'
def fc = new FooController()
and: 'with authorized user'
fc.springSecurityService = [principal: [username: 'somebody']]
and: 'with request parameter set'
fc.params.id = '1122'
when: 'create is called'
fc.create()
then: 'check redirect url and error message'
fc.flash.errorMessage == "User Not Found"
fc.response.redirectUrl == "/"
}
}