1

我最近升级到 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"
    }
}
4

3 回答 3

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"
    }
}

不确定,但希望它对你有用。

于 2017-12-03T13:42:13.753 回答
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"
    }
}
于 2017-11-27T17:48:05.643 回答
0

删除@Mock注释并ServiceUnitTest<MyService>在您的测试类中实现。

于 2017-11-30T16:12:25.703 回答