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)

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top