2015-09-24 13 views
6

Tôi đã bị sốc khi một cái gì đó dọc theo dòng:Lỗi Hamcrest có sử dụng không đúng hoặc không đúng hoặc không chính xác?

assertThat(null, either(is(nullValue())).or(notNullValue())); 

Không với:

java.lang.AssertionError: 
Expected: (is null or not null) 
    but: was null 
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20) 
    at org.junit.Assert.assertThat(Assert.java:956) 
    at org.junit.Assert.assertThat(Assert.java:923) 
    at Demo.testName(Demo.java:12) 

Tôi không nghĩ rằng việc sử dụng này là rất không bình thường (tôi đang thực sự cố gắng để khẳng định bản đồ null hoặc rỗng) và tôi không thể tìm thấy bất cứ điều gì sai trái với mã nguồn hamcrest ...

Trả lời

4

Đã một thời gian để làm một số gỡ lỗi.

Sự cố là either() tạo ra một CombinableMatcher mở rộng TypeSafeDiagnosingMatcher. Sau này tự động từ chối null.

IMHO, tham số loại Matcher thực sự chỉ là một gợi ý chứ không phải là một yêu cầu để lớp siêu này thực sự không an toàn ...

Edit:

Và đây là một báo cáo lỗi (https://github.com/hamcrest/JavaHamcrest/issues/49). Tôi đoán nó sẽ không bao giờ được sửa ...

4

sử dụng anyOf

Từ Hamcrest tutorials

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

Cái gì như:

assertThat(value, anyOf(equalTo(1), equalTo(2))); 
Các vấn đề liên quan