Gradle忽略了我的Spock单元测试之一,并没有告诉我为什么

时间:2019-04-25 15:53:08

标签: unit-testing gradle groovy spock

我有一个Spock单元测试(规范),其中定义了3个测试。其中两个测试可以很好地执行,但是其中一个被Spock或Gradle完全忽略了,我不知道为什么。

这是被忽略的测试:

    def "connect to kinesis"() {

        given:

        Yaml parser = new Yaml()
        YAMLConfig config = parser.load((testConfigFileName as File).text)

        putKinesisRecordsUtil.config = config

        putKinesisRecordsUtil.putRecords(mockKinesisClient)

        1 * mockKinesisClient.putRecords(_)

        expect:

        1 == 1

    }

此测试中是否存在一行以确定该测试是否被忽略:

putKinesisRecordsUtil.config = config

就是这样。为什么在putKinesisRecordsUtil中指定参数会使Spock或Gradle忽略整个测试而没有警告或错误消息?我是否正确填充此值?

该测试扩展了spock.lang.Specification,其他测试成功运行。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

交互应放置在“ then”块中或“ when”块之前的任何位置。我将您的测试重构为使用“给定”,“何时”和“然后”。然后将交互移动到then块。

Where to put interactions

  

作为指导原则,使用when-then描述具有副作用的方法,并期望描述纯功能方法。

Spock Framework Reference Documentation

def "connect to kinesis"() {
    given:
    Yaml parser = new Yaml()

    when:
    YAMLConfig config = parser.load((testConfigFileName as File).text)
    putKinesisRecordsUtil.config = config
    putKinesisRecordsUtil.putRecords(mockKinesisClient)

    then:
    1 * mockKinesisClient.putRecords(_)
    1 == 1
}

希望这会有所帮助!