Più risultati corretti con Hamcrest (esiste un or-matcher?)
Domanda
Sono relativamente nuovo ai matcher. Sto giocando con hamcrest in combinazione con JUnit e mi piace un po '.
C'è un modo per affermare che una delle scelte multiple è corretta?
Qualcosa di simile
assertThat( result, is( either( 1, or( 2, or( 3 ) ) ) ) ) //does not work in hamcrest
Il metodo che sto testando restituisce un elemento di una raccolta. L'elenco può contenere più candidati. La mia attuale implementazione restituisce il primo successo, ma questo non è un requisito. Vorrei che il mio testcase avesse successo, se venisse restituito uno dei possibili candidati. Come lo esprimeresti in Java?
(Sono aperto alle alternative più amare)
Soluzione
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3)))
Da Tutorial di Hamcrest :
anyOf: corrisponde a qualsiasi matcher corrispondente, cortocircuiti (come Java ||)
Vedi anche Javadoc .
Inoltre, potresti scrivere il tuo Matcher, cosa abbastanza facile da fare.
Altri suggerimenti
marcos ha ragione, ma hai anche un paio di altre opzioni. Prima di tutto, è o / o:
assertThat(result, either(is(1)).or(is(2)));
ma se hai più di due oggetti probabilmente diventerebbe ingombrante. Inoltre, il typechecker diventa strano su cose del genere a volte. Nel tuo caso, potresti fare:
assertThat(result, isOneOf(1, 2, 3))
o se hai già le tue opzioni in un array / Collezione:
assertThat(result, isIn(theCollection))
Vedi anche Javadoc .