2016-11-16 90 views
0

我有以下的常規類如何編寫spock測試來測試我的課程與外部實用程序課程之間的交互?

import Utils 

class HelpController { 

    def search = { 
     Utils.someFunction() 
    } 

} 

這裏是我的斯波克常規規格:

import Utils 
import grails.test.mixin.* 
import HelpController 

@TestMixin(GrailsUnitTestMixin) 
@TestFor(HelpController) 
class HelpControllerSpec extends Specification { 

    void "should call someFunction method in Utils class"() { 

     when: 
     helpController.search() 

     then: 
     1 * Utils.someFunction() 
    } 

} 

運行在錯誤的測試結果:

too few invocations for Utils.someFunction() (0 invocations) 

utils的是一個Java類。當我通過spock單元測試時,看起來Utils.someFunction()被調用,所以我對於可能發生的事情有些困惑。任何人都可以建議嗎?提前致謝!

回答

1

您必須實現該方法,因爲您正在運行單元測試,並且grails應用程序未運行。

使用註釋@ConfineMetaClassChanges清潔類utils的

import Utils 
import grails.test.mixin.* 
import HelpController 
import spock.util.mop.ConfineMetaClassChanges 

@TestMixin(GrailsUnitTestMixin) 
@TestFor(HelpController) 
@ConfineMetaClassChanges([Utils]) 
class HelpControllerSpec extends Specification { 

    setup(){ 
     Utils.metaClass.someFunction = { 
      //expected response 
     } 
    } 

    void "should call someFunction method in Utils class"() { 

     when: 
     helpController.search() 

     then: 
     1 * Utils.someFunction() 
    } 

} 
+0

尼斯元類,但不應該在Utils.metaClass改變去了@ConfineMetaClassChanges涵蓋範圍內? – railsdog

+0

你是對的!謝謝 – quindimildev

+0

感謝您的建議!但是,我看到「沒有這樣的屬性:用於Utils的元類」錯誤。我嘗試在Utils中擴展Expando,但仍然收到相同的錯誤...請注意Utils是POJO –

相關問題