Spock:在Stubs中返回输入参数

时间:2017-10-06 14:16:18

标签: java groovy mocking spock

给定一个带有Java 参数的方法,例如

view = Browse.as_view()
return view(request)

当存根/模拟foo时,如何告诉它接受任何参数并返回它? ( Groovy的

public class Foo {
   public Bar theBar(Bar bar) { /*... */ }   
}

如您所见,我通过了身份功能。但是我不知道要传递什么作为参数。 def fooStub = Stub(Foo) { theBar(/*what to pass here*/) >> { x -> x } } 不起作用,因为它是_,因此不属于ArrayList

类型

2 个答案:

答案 0 :(得分:7)

您可以通过以下方式存根Foo课程:

Foo foo = Stub(Foo)
foo.theBar(_ as Bar) >> { Bar bar -> bar }

以下是完整的例子:

import groovy.transform.Immutable
import spock.lang.Specification

class StubbingSpec extends Specification {

    def "stub that returns passed parameter"() {
        given:
        Foo foo = Stub(Foo)
        foo.theBar(_ as Bar) >> { Bar bar -> bar }

        when:
        def result = foo.theBar(new Bar(10))

        then:
        result.id == 10
    }

    static class Foo {
        Bar theBar(Bar bar) {
            return null
        }
    }

    @Immutable
    static class Bar {
        Integer id
    }
}

答案 1 :(得分:0)

我不确定你的意思。 _是正确的。为什么你认为它是ArrayList?它的类型为Object,可以用于任何事情。