【问题标题】:How to write a spock unit test case for traits in grails 2.4?如何为 grails 2.4 中的特征编写 spock 单元测试用例?
【发布时间】:2015-03-03 19:49:05
【问题描述】:

我正在使用 Traits 使我的控制器干燥。我想使用 Spock 对 Trait 类进行单元测试。这里分别是我的样本 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 方法。这是正确的方法吗,如果不是,请用一个恰当的例子指出正确的方向。

【问题讨论】:

  • 有人遇到过这种情况吗?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多