Nhiều kết quả đúng với Hamcrest (có hay đối sánh không?)


76

Tôi tương đối mới đối với những người phối hợp. Tôi đang đùa giỡn với hamcrest kết hợp với JUnit và tôi khá thích nó.

Có cách nào để nói rằng một trong nhiều lựa chọn là đúng không?

Cái gì đó 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ả về một phần tử của tập hợp. Danh sách có thể chứa nhiều ứng cử viên. Việc triển khai hiện tại của tôi trả lại lần truy cập đầu tiên, nhưng đó không phải là một yêu cầu. Tôi muốn testcase của mình thành công, nếu bất kỳ ứng viên nào có thể được trả lại. Bạn sẽ diễn đạt điều này như thế nào trong Java?

(Tôi sẵn sàng đón nhận những lựa chọn thay thế hamcrest)

Câu trả lời:


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

Từ hướng dẫn Hamcrest :

anyOf - đối sánh nếu có bất kỳ đối sánh nào khớp, ngắn mạch (như Java ||)

Xem thêm Javadoc .

Hơn nữa, bạn có thể viết Matcher của riêng mình, điều này khá dễ thực hiện.


82

marcos đúng, nhưng bạn cũng có một số lựa chọn khác. Trước hết, đó một trong hai / hoặc:

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

nhưng nếu bạn có nhiều hơn hai món đồ, nó có thể sẽ khó sử dụng. Thêm vào đó, người đánh máy đôi khi cảm thấy kỳ lạ với những thứ như vậy. Đố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ó các tùy chọn của mình trong một mảng / Bộ sưu tập:

assertThat(result, isIn(theCollection))

Xem thêm Javadoc .


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

Vâng, assertThat((Set<String>)null, is(either(empty()).or(nullValue())));mang lại cho tôi một lỗi khẳng định khá lạ: Expected: is (an empty collection or null) but: was nullcho hamcrest 1.3...
Jezor

isOneOf () hiện không được dùng nữa.
Jolta
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.