Sto scrivendo unit test utilizzando Spock per groovy-2.0 e utilizzando gradle per l'esecuzione. Se scrivo seguendo il test pass.Test unità Groovy2.0 con Spock: setup()
import spock.lang.Specification
class MyTest extends Specification {
def "test if myMethod returns true"() {
expect:
Result == true;
where:
Result = new DSLValidator().myMethod()
}
}
myMethod() è un metodo semplice nella classe DSLValidator, che restituisce semplicemente true.
Ma se scrivo una funzione setup() e creare l'oggetto nel setup(), il mio test fallisce: Gradel dice: FALLITA: java.lang.NullPointerException: Non è possibile richiamare il metodo myMethod() su un oggetto nullo
di seguito è quello che sembra con setup(),
import spock.lang.Specification
class MyTest extends Specification {
def obj
def setup(){
obj = new DSLValidator()
}
def "test if myMethod returns true"() {
expect:
Result == true;
where:
Result = obj.myMethod()
}
}
qualcuno può aiutarmi?
ecco la soluzione sono arrivato al problema:
import spock.lang.Specification
class DSLValidatorTest extends Specification {
def validator
def setup() {
validator = new DSLValidator()
}
def "test if DSL is valid"() {
expect:
true == validator.isValid()
}
}
Strano ... I documenti di Spock potrebbero davvero fare dei chiarimenti su questo ... Non direi che l'oggetto viene condiviso tra i metodi di feature, ma viene impostato prima che ogni dispositivo venga chiamato ... –
Cos'è che non capisci? Un campo @Shared _è_ condiviso tra i metodi delle caratteristiche e dovrebbe essere impostato con un inizializzatore di campo o con il metodo 'setupSpec'. 'setup' non è una buona scelta qui perché viene chiamato dopo che il blocco' where' è stato valutato. –
Grazie per il chiarimento –