我最近已升级到grails 3.3.1,并意识到grails.test.mixin.Mock
已根据我的理解org.grails:grails-test-mixins:3.3.0
被拉到单独的项目,该项目仅为了向后兼容而构建。
我一直在使用@Mock
注释来模拟注入到测试中的groovy / src类中的Grails服务。在这种情况下,模拟协作服务的策略是什么? Spock有什么可以使用的,或者我应该回到grails-test-mixins插件?
待测班级: import gra
ils.util.Holders
import grails.util.Holders
class SomeUtilClass {
static MyService myService = Holders.grailsApplication.mainContext.getBean("myService")
static String myMethod() {
// here is some code
return myService.myServiceMethod()
}
}
我的测试规范(Grails 3.2.1):
import grails.test.mixin.Mock
import spock.lang.Specification
@Mock([MyService])
class ValidatorUtilsTest extends Specification {
def 'my test'() {
when:
def result = SomeUtilClass.myMethod()
then:
result == "result"
}
}
答案 0 :(得分:1)
由于您在SomeUtilClass中使用Holders.grailsApplication,您可以尝试添加@Integration注释:
import grails.testing.mixin.integration.Integration
import spock.lang.Specification
@Integration
class ValidatorUtilsTest extends Specification {
def 'my test'() {
when:
def result = SomeUtilClass.myMethod()
then:
result == "result"
}
}
不确定,但希望它适合你。
答案 1 :(得分:0)
尝试使用此代码
@TestMixin(GrailsUnitTestMixin)
@Mock([your domains here])
class ValidatorUtilsTest extends Specification {
static doWithSpring = {
myService(MyService)
}
def 'my test'() {
when:
def result = SomeUtilClass.myMethod()
then:
result == "result"
}
}
答案 2 :(得分:0)
删除@Mock
注释并在测试类中实现ServiceUnitTest<MyService>
。