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)

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top