2016-11-16 8 views
0

私はここで、次のGroovyクラスにテスト中のクラスと外部ユーティリティクラスとの間の相互作用をテストするために、どのようにして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アプリケーションが実行されていないため、その方法を実装する必要があります。

は、クラス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

ニースのメタクラスを洗浄するためのアノテーション@ConfineMetaClassChangesを使用しますが、Utils.metaClass変更は@ConfineMetaClassChangesに包含される範囲内で行ってはなりませんか? – railsdog

+0

あなたは正しいです!ありがとうございました – quindimildev

+0

提案ありがとう!しかし、私は "いいえそのようなプロパティ:Utilsのためのメタクラス"エラーが表示されます。 UtilsでExpandoを拡張しようとしましたが、同じエラーが発生しています... UtilsはPOJOです –

関連する問題