2014-11-13 10 views
6

W metodzie elementu jeden określa działanie funkcji w bloku when:, którego wynik zostaje przetestowany w kolejnym bloku then:. Często potrzebne jest przygotowanie, które odbywa się w klauzuli given: (lub setup: lub metodzie urządzenia). Równie przydatne jest uwzględnienie warunków wstępnych: są to warunki, które nie są przedmiotem testu właściwości (dlatego nie powinny być w postaci testu), ale potwierdzają/dokumentują warunki niezbędne do tego, aby test był znaczący. Zobacz przykładową specyfikację poniżej:Jaki jest dobry styl dla warunków wstępnych w metodach cech Spocka?

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 
    } 
} 

Jaka jest sugerowana praktyka dla tych warunków wstępnych? W tym przykładzie użyłem assert, ale wiele jest niezrozumiałych dla assert s w Spec.

+3

To co bym zrobiła. Nie ma nic złego w korzystaniu z 'assert' w specyfikacji, kiedy jest taka potrzeba (nadal jest to warunek Spocka, a nie asercja Groovy). –

Odpowiedz

6

byłem zawsze za pomocą expect takich scenariuszy:

@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

dzięki za odpowiedź, @opal, ja sam wolę 'assert' na' spodziewać' i idę za radą @ peter-niederwieser's. –

Powiązane problemy