2014-11-13 10 views
6

In un metodo feature, si specifica l'azione feature in un blocco when:, il cui risultato viene testato in un successivo blocco then:. Spesso è necessaria la preparazione, che viene eseguita in una clausola given: (o setup: o metodo fixture). È ugualmente utile includere le condizioni preliminari: si tratta di condizioni che non sono oggetto del test funzionale (quindi non dovrebbero essere in un when: - then: o expect:) ma affermano/documentano le condizioni necessarie affinché il test sia significativo. Vedere ad esempio le specifiche fittizie di seguito:Qual è lo stile giusto per le precondizioni nei metodi di Spock?

import spock.lang.* 

class DummySpec extends Specification { 
    def "The leading three-caracter substring can be extracted from a string"() { 
    given: "A string which is at least three characters long" 
    def testString = "Hello, World" 

    assert testString.size() > 2 

    when: "Applying the appropriate [0..2] operation" 
    def result = testString[0..2] 

    then: "The result is three characters long" 
    result.size() == 3 
    } 
} 

Qual è la pratica suggerita per queste condizioni preliminari? Nell'esempio ho usato assert, ma molti hanno il cipiglio su assert s in una specifica.

+3

Questo è quello che mi piacerebbe fare. Non c'è niente di sbagliato nell'usare 'assert' in una specifica quando necessario (è ancora una condizione di Spock, non un'asserzione di Groovy). –

risposta

6

Sto Sfruttamento expect per tali scenari:

@Grab('org.spockframework:spock-core:0.7-groovy-2.0') 
@Grab('cglib:cglib-nodep:3.1') 

import spock.lang.* 

class DummySpec extends Specification { 
    def "The leading three-caracter substring can be extracted from a string"() { 
    given: "A string which is at least three characters long" 
    def testString = "Hello, World" 

    expect: "Input should have at least 3 characters" 
    testString.size() > 3 

    when: "Applying the appropriate [0..2] operation" 
    def result = testString[0..2] 

    then: "The result is three characters long" 
    result.size() == 3 
    } 
} 
+1

grazie per la tua risposta, @opal, io stesso preferisco effettivamente "assert" a "expect" e sto seguendo il consiglio di @ peter-niederwieser. –

Problemi correlati