如何使用 Grails 3 在 groovy/src class 中模拟服务 3.x
How to mock service in groovy/src class under test with Grails 3.3.x
我最近升级到 grails 3.3.1 并意识到 grails.test.mixin.Mock
已被拉到单独的项目,根据我的理解 org.grails:grails-test-mixins:3.3.0
.
我一直在使用 @Mock
注释模拟注入到 groovy/src class 测试中的 Grails 服务。在这种情况下模拟协作服务的策略是什么? Spock 有什么我可以使用或者我应该回退到 grails-test-mixins 插件吗?
Class 测试中:
导入 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"
}
}
尝试使用此代码
@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"
}
}
删除 @Mock
注释并在测试 class 中实施 ServiceUnitTest<MyService>
。
由于您在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"
}
}
不确定,但希望它对你有用。
我最近升级到 grails 3.3.1 并意识到 grails.test.mixin.Mock
已被拉到单独的项目,根据我的理解 org.grails:grails-test-mixins:3.3.0
.
我一直在使用 @Mock
注释模拟注入到 groovy/src class 测试中的 Grails 服务。在这种情况下模拟协作服务的策略是什么? Spock 有什么我可以使用或者我应该回退到 grails-test-mixins 插件吗?
Class 测试中: 导入 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"
}
}
尝试使用此代码
@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"
}
}
删除 @Mock
注释并在测试 class 中实施 ServiceUnitTest<MyService>
。
由于您在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"
}
}
不确定,但希望它对你有用。