Ho appena notato che Spock non asserisce le condizioni se aggiungo una clausola if
nel blocco aspettare come inStato da aspettarsi bloccare
def myTest() {
given:
a = true
expect:
if (a) {
1 == 2
}
else {
1 == 1
}
}
È possibile che questo prova passerà in quanto le condizioni non vengono controllati . Oppure il controllo delle condizioni non viene inoltrato passa l'istruzione if.
La soluzione a questo è quello di aggiungere assert
dichiarazioni all'interno del blocco if, cioè affermare 1 == 2.
Quello che mi interessa è, è il motivo per cui la funzionalità è così? C'è un altro modo per aggirare questo? Suppongo che questo abbia qualcosa a che fare con Groovy se la funzionalità dell'istruzione, ma non conosco abbastanza bene i dettagli della lingua. Molto probabilmente l'istruzione if non restituisce nulla per il blocco previsto da Spock con cui lavorare.
Non rispondere alla domanda, ma perché testare in questo modo? Non dovresti provare cose conosciute? Se ci sono percorsi diversi, non dovrebbero essere test diversi? –
In secondo luogo che cosa ha detto Tim. Se il test fallisce, sei in grado di dire cosa ha fallito invece di una delle cose X fallito? Forse questo era solo un esempio, ma ogni test dovrebbe testare solo una cosa. Forse hai bisogno di un test simile con alcuni valori modificati? Se questo è il caso, dovresti prendere in considerazione la possibilità di esaminare la dichiarazione in spock. –
@tim_yates @Aseem Il motivo dell'utilizzo di un'istruzione if durante il controllo delle condizioni è a causa della complessità dell'input di test e solo alcuni casi eccezionali ricadono nell'altro ramo di if, che in pratica si riduce alla pigrizia :) Il caso d'uso è qualcosa come 'Verifica che la condizione A sia soddisfatta a meno che X, in tal caso, controlla che la condizione B sia soddisfatta invece'. Potrebbe essere risolto con un blocco dove, ma per i miei gusti è troppo prolisso. – kaskelotti