如何为grails 2.4中的特征编写spock单元测试用例?

时间:2015-01-06 07:01:43

标签: unit-testing grails spock traits grails-2.4

我正在使用Traits让我的控制器干掉。我想使用Spock对Trait类进行单元测试。这是我的样本特征和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   
    }

由于trait是一个接口,我在我的测试用例中有一个Mocked类正在实现Trait,我创建了一个这个Mocked类的对象并调用我要测试的Trait方法。这是正确的方法,如果不是,请用恰当的例子指出正确的方向。

1 个答案:

答案 0 :(得分:8)

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)说代理保证实现特性和任何/所有接口,如果你有任何可能会导致问题检查对象的具体类型。