如何在Grails 3.3.x中测试groovy/src类中的服务
我最近升级到grails 3.3.1,并意识到grails.test.mixin.Mock
已被拉到单独的项目,这是为了向后兼容,根据我的了解org.grails:grails-test-mixins:3.3.0
。如何在Grails 3.3.x中测试groovy/src类中的服务
我一直在使用@Mock
注释来模拟Grails服务,注入到被测试的groovy/src类中。在这种情况下模拟协作服务的策略是什么? Spock有什么我可以使用的,或者我应该回退到grails-test-mixins插件吗?被测
类: 进口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"
}
}
由于您在使用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"
}
}
不知道,但希望它为你工作。
尝试使用此代码
@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"
}
}
好吧,这不起作用,因为依赖注入是通过手动完成的。它抛出一个异常'java.lang.IllegalArgumentException:GrailsApplication not found'。我仍然可以使用@Mock什么工作。我在问是否还有另一种更好的方法... – kuceram
取出@Mock
注解并在您的测试课程中实施ServiceUnitTest<MyService>
。
嗯,这实际上是对我来说最干净的解决方案,因为我也想测试MyService。所以集成服务最有意义。谢谢... – kuceram
听到这个真的很高兴:D。 –