2017-11-25 146 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>