Spock无法检测到doTip方法调用

(我需要共享一些“ where”块。)

使用最新的groovy和spock。

为什么此代码是错误的?

如何解决?

import spock.lang.Shared
import spock.lang.Specification

class Test extends Specification {
def controller
@Shared
String g = ""
@Shared
def tip = Mock(Tip)

def "test"() {
    controller = new TController(tip: tip)
    when:
    controller.transform(g)

    then:
    1 * tip.doTip(_)
}
}

class Tip {
def doTip(String f) {}
}

class TController {
Tip tip

def transform(String g) {
    tip.doTip(g)
}
}

最佳答案

使用setup()创建模拟,如下所示:

@Grab(group='org.spockframework', module='spock-core', version='1.0-groovy-2.4')

import spock.lang.*

class Test extends Specification {
    def controller
    @Shared String g = ""
    @Shared tip

    def setup() {
        tip = Mock(Tip)
    }

    def "test"() {
        given:
        controller = new TController(tip: tip)

        when:
        controller.transform(g)

        then:
        1 * tip.doTip(_)
    }
}

class Tip {
    def doTip(String f) {}
}

class TController {
    Tip tip

    def transform(String g) {
        tip.doTip(g)
    }
}


结果

JUnit 4 Runner, Tests: 1, Failures: 0, Time: 78

关于unit-testing - Spock无法检测方法调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37361157/

10-10 12:52