2017-11-25 196 views
1

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

回答

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

不知道,但希望它为你工作。

+0

嗯,这实际上是对我来说最干净的解决方案,因为我也想测试MyService。所以集成服务最有意义。谢谢... – kuceram

+0

听到这个真的很高兴:D。 –

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

好吧,这不起作用,因为依赖注入是通过手动完成的。它抛出一个异常'java.lang.IllegalArgumentException:GrailsApplication not found'。我仍然可以使用@Mock什么工作。我在问是否还有另一种更好的方法... – kuceram

0

取出@Mock注解并在您的测试课程中实施ServiceUnitTest<MyService>