Vários resultados corretos com Hamcrest (existe um ou-matcher?)
Pergunta
Eu sou relativamente novo para matchers. Eu estou brincando ao redor com hamcrest em combinação com JUnit e eu meio que gosto disso.
Existe uma maneira, a afirmar que uma das várias opções é a correta?
Algo como
assertThat( result, is( either( 1, or( 2, or( 3 ) ) ) ) ) //does not work in hamcrest
O método que eu estou testando retorna um elemento de uma coleção. A lista pode conter vários candidatos. Minha implementação atual retorna o primeiro hit, mas isso não é uma exigência. Gostaria que o meu testcase para ter sucesso, se qualquer um dos possíveis candidatos é retornado. Como você expressar isso em Java?
(Estou aberto a hamcrest-alternatives)
Solução
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3)))
A partir Hamcrest tutorial :
anyOf - partidas se algum matchers corresponder, curto-circuitos (como Java ||)
Veja também Javadoc .
Além disso, você pode escrever seu próprio Matcher, o que é bastante fácil de fazer.
Outras dicas
Marcos é certo, mas você tem algumas outras opções também. Primeiro de tudo, há é um ou / ou:
assertThat(result, either(is(1)).or(is(2)));
mas se você tiver mais de dois itens seria provavelmente ficar pesado. Além disso, o typechecker fica estranho em coisas assim às vezes. Para o seu caso, você poderia fazer:
assertThat(result, isOneOf(1, 2, 3))
ou se você já tem as suas opções em uma matriz / coleção:
assertThat(result, isIn(theCollection))
Veja também Javadoc .