在Grails 1.3.7 Spock中进行单元测试失败

时间:2015-02-11 21:57:25

标签: unit-testing grails

我在控制器中有这段代码:

def update = {

    Map model = [:]
    model.foo = params.foo
    model.bar = params.bar

    def result = ""

    MyObject obj = MyObject.findWhere(bar:bar, foo:foo)

    MyObjectService.updateObj(model,obj)
    result = true

    render result as JSON
}

这个简单的单元测试:

def 'controller update'() {
    given:
        controller.params.foo = foo
        controller.params.bar = bar

        MyObject obj = new MyObject(bar:bar, foo:foo)
        mockDomain(MyObject,[obj])
    when:
        controller.update()
    then:
        1 * MyObject.findWhere(bar:bar, foo:foo) >> obj
        1 * MyObjectService.updateObj(model,obj)
    and:    
        def model = JSON.parse(controller.response.contentAsString)
        model == true
    where:
        foo = "0"
        bar = "1"
}

现在这是失败的,它告诉我,"不是静态方法findWhere适用..."对于那些论点。那个" MyObject"只是一个orm类,当我运行该应用程序时,一切似乎工作正常,但测试失败。

我的逻辑是:

我想计算调用findWhereupdateObj方法的次数,我也在嘲笑他们的回复。因此findWhere将返回我已经模拟的对象,并将其传递给服务。

为什么会失败的任何想法?

1 个答案:

答案 0 :(得分:1)

对于模拟静态方法,你应该使用在v0.7中引入的Spock的GroovyStub类。