2015-01-06 7 views
6

私はコントローラをDRYにするために特性を使用しています。 Spockを使ってTraitクラスの単体テストをしたい。ここでは、それぞれ自分のサンプル特性とスポックのテストケースである:grails 2.4の特質のためにspockユニットテストケースを書くには?

trait SomeTrait { 
    public void checkSomething (Closure c){ 
     // Do some operation 
     c.call 
    } 
} 

@TestMixin(GrailsUnitTestMixin) 
class SomeTraitSpec extends Specification { 
    void "test checkSomething "(){ 
     setup: 
     MockedClass mockedObj = new MockedClass() 
     def x=0 
     def c = { 
      x=1 
     } 

     when: 
     mockedObj.checkSomething(c) 

     then: 
     assert x==1 
    } 
} 
class MockedClass implements PermissionTrait { 
    // some thing 
    } 

形質はインターフェースなので、私は形質を実装している私のテストケースに嘲笑クラスを持って、私はこの嘲笑クラスのオブジェクトを作成し、私を呼びます私がテストしたい形質メソッド。これは正しいアプローチですか、そうでない場合は適切な例を示してください。

+0

このような状況に直面した人はいますか? –

答えて

7

Groovyの型強制は、実行時に特性からクラスへの動作を追加するために使用できます。

あなたはドキュメント( http://docs.groovy-lang.org/docs/groovy-2.3.0/html/documentation/core-traits.html#_runtime_implementation_of_traits)はプロキシが特色と任意の/すべてのインターフェイスを実装することが保証されて言いますが、これは、プロキシされたインスタンスを作成し、あなたがチェックしている場合、これは問題を引き起こす可能性があることを認識しておく必要があり
class MyTraitSpec extends Specification 
{ 
    @Shared 
    MyTrait testInstance = new Object() as MyTrait 

    // ... 
} 

オブジェクトの具体的な型。

関連する問題