2008-09-30 28 views
61

Tôi tương đối mới đối sánh với nhau. Tôi đang đùa giỡn với hamcrest kết hợp với JUnit và tôi thích nó.Nhiều kết quả chính xác với Hamcrest (có hoặc không khớp?)

Có cách nào, nêu rõ rằng một trong nhiều lựa chọn là chính xác không?

Something như

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

Phương pháp Tôi đang thử nghiệm trở lại một yếu tố của một bộ sưu tập. Danh sách có thể chứa nhiều ứng cử viên. Triển khai hiện tại của tôi trả về lần truy cập đầu tiên, nhưng đó không phải là yêu cầu. Tôi muốn testcase của tôi thành công, nếu bất kỳ ứng cử viên nào có thể được trả về. Làm thế nào bạn sẽ thể hiện điều này trong Java?

(Tôi mở cửa cho hamcrest-alternatives)

Trả lời

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

Từ Hamcrest tutorial:

anyOf - trận đấu nếu có quẹt phù hợp, mạch ngắn (như Java ||)

Xem thêm Javadoc.

Hơn nữa, bạn có thể viết Matcher của riêng bạn, những gì là khá dễ dàng để làm.

71

marcos là đúng, nhưng bạn cũng có một vài tùy chọn khác. Trước hết, có một hoặc/hoặc:

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

nhưng nếu bạn có nhiều hơn hai mục nó có lẽ sẽ được trở nên cồng kềnh. Thêm vào đó, các typechecker được kỳ lạ trên các công cụ như thế đôi khi. Đối với trường hợp của bạn, bạn có thể làm:

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

hoặc nếu bạn đã có lựa chọn của bạn trong một mảng/Bộ sưu tập:

assertThat(result, isIn(theCollection)) 

Xem thêm Javadoc.

+0

Hmmm ... vì một số lý do không thể giải thích môi trường Eclipse của tôi (chỉ khoảng 6 tháng tuổi) có thư viện Hamcrest cổ và tôi không nhận được những tính năng này. – CurtainDog

Các vấn đề liên quan