2015-01-06 187 views
6

我正在使用Traits使我的控制器乾燥。我想用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的類型強制轉換可用於在運行時將行爲從特徵添加到類中。

class MyTraitSpec extends Specification 
{ 
    @Shared 
    MyTrait testInstance = new Object() as MyTrait 

    // ... 
} 

你應該知道,這將創建一個代理實例,儘管文檔(http://docs.groovy-lang.org/docs/groovy-2.3.0/html/documentation/core-traits.html#_runtime_implementation_of_traits)說,代理是保證實現性狀和任何/所有的接口,這可能會導致如果你曾經檢查問題對象的具體類型。