ClassCastException w/ @TestFor in Grails 2.4.4


当我在Grails 2.4.4中的Spock测试中使用@TestFor注释时,我得到了一个java.lang.ClassCastException

这是我的代码:

package com.mycompany.myproject
import grails.test.mixin.TestFor
import grails.test.mixin.TestMixin
import grails.test.mixin.support.GrailsUnitTestMixin
import spock.lang.Specification
@TestFor(SnsService)
@TestMixin(GrailsUnitTestMixin)
class SnsServiceSpec extends Specification {
def "test something"() {
expect:
service.name == "bacon"
}
}

这是错误消息:

| Running 2 unit tests... 1 of 2
| Failure:  test something(com.campuscardtools.myphotoid.SnsServiceSpec)
|  java.lang.ClassCastException: java.lang.Class cannot be cast to com.campuscardtools.myphotoid.SnsService
at com.campuscardtools.myphotoid.SnsServiceSpec.test something(SnsServiceSpec.groovy:16)
| Completed 1 unit test, 1 failed in 0m 0s
| Tests FAILED  - view reports in /Users/terskine/git/myphotoid-api/target/test-reports

然而,如果我只是声明服务,一切都正常:

package com.mycompany.myproject
import grails.test.mixin.TestFor
import grails.test.mixin.TestMixin
import grails.test.mixin.support.GrailsUnitTestMixin
import spock.lang.Specification
@TestFor(SnsService)
@TestMixin(GrailsUnitTestMixin)
class SnsServiceSpec extends Specification {
SnsService service = new SnsService()
def "test something"() {
expect:
service.name == "bacon"
}
}

然后,我得到:

grails> test-app -unit SnsService
| Completed 1 unit test, 0 failed in 0m 0s
| Tests PASSED - view reports in /Users/terskine/git/myphotoid-api/target/test-reports

在同一个项目中,我有很多单元测试使用@TestFor注释,但不需要显式声明组件。

我错过了什么?如果很明显的话,我事先很抱歉。

为什么要添加GrailsUnitTestMixin?这有必要吗?

最新更新