2008-09-30 2 views
61

저는 matchers에 비교적 익숙하지 않습니다. 나는 JUnit과 함께 hamcrest을 가지고 놀고 있는데, 나는 그것을 좋아한다.Hamcrest에서 여러 개의 올바른 결과가 나타납니다 (또는 정규 표현식이 있습니까?)

여러 선택 사항 중 하나가 맞음을 설명하는 방법이 있습니까?

assertThat(result, is(either(1, or(2, or(3))))) //does not work in hamcrest 

방법 I는 반환에게 컬렉션의 하나 개의 요소를 테스트하고 같은

뭔가. 목록에는 여러 후보자가 포함될 수 있습니다. 현재 구현은 첫 번째 히트를 반환하지만 요구 사항은 아닙니다. 가능한 후보자 중 하나라도 반환되면 테스트 케이스를 성공시키고 싶습니다. 자바에서 이것을 어떻게 표현하겠습니까?

Hamcrest tutorial에서

답변

91
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3))) 

(나는-대안 hamcrest 열려 오전) :

실행 하는가 - 일치하는 어떤 매처 (matcher)가 일치하는 경우,

(|| 자바와 같은) 단락

도 참조하십시오 Javadoc.

또한 Matcher를 작성할 수도 있습니다. 매우 쉽습니다.

71

marcos가 맞지만 몇 가지 다른 옵션이 있습니다. 우선,이 중 하나입니다/또는 :

assertThat(result, either(is(1)).or(is(2))); 

하지만 두 개 이상의 항목이 있다면 그것은 아마 다루기 얻을 것입니다. 게다가, 형 검사기는 가끔 그런 것들에 이상하게 보입니다.

assertThat(result, isOneOf(1, 2, 3)) 

을하거나 이미 배열/컬렉션 옵션이있는 경우 : 귀하의 경우를 들어, 당신은 할 수

assertThat(result, isIn(theCollection)) 

Javadoc를 참조하십시오.

+0

흠 ... 설명 할 수없는 이유 때문에 내 Eclipse 환경 (약 6 개월 만 사용)에는 고대 햄 클레스트 라이브러리가 있으며 이러한 맛있는 것을 얻지 못합니다. – CurtainDog

관련 문제