Ho un test con i loop nella clausola then:unit test spock loop in poi clausola
result.each {
it.name.contains("foo")
it.entity.subEntity == "bar"
}
for (String obj : result2) {
obj.name.contains("foo")
obj.entity.subEntity == "bar"
}
Recentemente ho riconosciuto che gli anelli non sono realmente testati. Non importa se ho foo o bar o altro, il test è sempre verde :) Ho scoperto che i loop devono essere testati in modo diverso, ad es. con "ogni"? Ma semplicemente cambiando il "ciascuno" a "ogni" genera un'eccezione:
result.every {
it.name.contains("foo")
it.entity.subEntity == "bar"
}
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Spec expression: 1: expecting '}', found '==' @ line 1, column 61.
s("foo") it.entity.rootEntity == "bar" }
Come dovrei utilizzare correttamente i loop nel mio test? Sto usando spock 0,7-groove-2,0
Attenzione! Il primo approccio genererà messaggi di errore più leggibili ma verrà valutato come 'false' (e l'operazione fallirà) nel caso in cui' result' sia una raccolta vuota! – Hubbitus
Avvertenza aggiuntiva: il secondo metodo può essere eseguito in [bug attualmente non risolto] (https://github.com/spockframework/spock/issues/253) se la chiusura che si passa a 'every' è composta da più righe. – jonnybot