[JAVA] Fehler "Where-Blöcke dürfen nur Parametrisierungen enthalten" in Spock

Fehler in Spock

Führen Sie den Test in Spock aus.

import spock.lang.*

class DataDrivenSpec extends Specification {

    def "a + b == sum"() {
        expect:
        a + b == sum

        where:
        a | b || sum
        1 | 2 || 3
        3 | 1 || 4
    }
}

Die Einstellung von "build.gradle" ist übrigens wie folgt.

build.gradle

build.gradle


plugins {
    id 'groovy'
}

group 'old-spock-sample'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    // https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all
    compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '1.7.5'
    // https://mvnrepository.com/artifact/org.spockframework/spock-core
    testCompile group: 'org.spockframework', name: 'spock-core', version: '0.5-groovy-1.7'
}

Dann habe ich folgenden Fehler bekommen:

where-blocks may only contain parameterizations (e.g. 'salary << [1000, 5000, 9000]; salaryk = salary / 1000')

Es scheint mehrere Gründe für diesen Fehler zu geben. Ich denke, es ist ein seltenes Muster, aber in meinem Fall lag es daran, dass die Spock-Version alt war.

Grund

In den [Versionshinweisen] von Spock (http://spockframework.org/spock/docs/1.2/release_notes.html#_0_6_released_2012_05_02) heißt es:

0.6 (released 2012-05-02)

(Weggelassen)

Improved Data Table Syntax

Table cells can now be separated with double pipes. This can be used to visually set apart expected outputs from provided inputs:

...
where:
a | b || sum
1 | 2 || 3
3 | 1 || 4

In Spock der erwartete Wert des Parametrisierungstests||Was danach geschrieben wird, ist Spock 0.Da es sich um eine in 6 hinzugefügte Funktion handelt, scheint sie je nach Version nicht verwendet werden zu können. (Derzeit (Mai 2020) ist die neueste Version 1.3) Die Lösung ist einfach||Zu|Sie können es ausführen, indem Sie einstellen. Alternativ sollte das Problem durch Erhöhen der Spock-Version gelöst werden. Da es sich um eine Funktion handelt, die selbstverständlich verwendet wird, hatte ich nicht die Idee, dass sie je nach Version möglicherweise nicht verfügbar ist, und ich hatte persönlich Probleme, weil ich die Ursache anhand der Fehlermeldung nicht sofort verstehen konnte. Seien Sie vorsichtig, wenn Sie eine sehr alte Version von Spock verwenden.

Recommended Posts

Fehler "Where-Blöcke dürfen nur Parametrisierungen enthalten" in Spock
FEHLER: In der Datei ./.env: Der Name der Umgebungsvariablen 'THOR_SILENCE_DEPRECATION' darf keinen Leerraum enthalten.