2015-11-21 14 views
19

Hamcrest cung cấp một số đối sánh để xác nhận nội dung của bộ sưu tập. Tất cả những trường hợp vượt qua:Làm thế nào để hascems của Hamcrest, chứa và chứaInAnyOrder khác nhau?

Collection<String> c = ImmutableList.of("one", "two", "three"); 
assertThat(c, hasItems("one", "two", "three"); 
assertThat(c, contains("one", "two", "three"); 
assertThat(c, containsInAnyOrder("one", "two", "three"); 

Làm thế nào để hasItems, containscontainsInAnyOrder khác nhau?

Trả lời

25

hasItems checks:

đèo liên tiếp so với năng suất Iterable kiểm tra ít nhất một mục đó là tương đương với mục tương ứng từ quy định items.

Nghĩa là, nó làm cho chắc chắn rằng các bộ sưu tập chứa ít nhất các mặt hàng này, trong bất kỳ thứ tự. Vì vậy,

assertThat(c, hasItems("one", "two")); 

cũng sẽ chuyển, với mục phụ bị bỏ qua. Và:

assertThat(c, hasItems("three", "two", "one")); 

cũng sẽ chuyển.

contains checks:

một pass duy nhất so với kiểm tra Iterable mang lại một loạt các mặt hàng, mỗi một cách logic tương ứng với mục tương ứng trong mục quy định. Đối với một kết hợp tích cực, kiểm tra lặp lại phải có cùng độ dài với số lượng các mục được chỉ định.

Vì vậy, nó làm cho chắc chắn rằng bộ sưu tập chứa chính xác các mặt hàng này:

assertThat(c, contains("one", "two")); // Fails 

này sẽ thất bại, như thừa "three" là không phù hợp.

assertThat(c, contains("three", "two", "one")); // Fails 

Điều này không thành công vì các mục tương ứng không khớp.

Một khớp liên quan, containsInAnyOrder, checks mà chính xác những mặt hàng có mặt, nhưng trong bất kỳ thứ tự:

Tạo một lệnh khớp thuyết bất khả tri cho Iterables phù hợp khi một pass duy nhất so với kiểm tra Iterable mang lại một loạt các các mục, mỗi mục hợp lý bằng một mục ở bất kỳ đâu trong các mục được chỉ định.

Một thử nghiệm với một mục mất tích thất bại:

assertThat(c, containsInAnyOrder("one", "two")); // Fails 

Nhưng tất cả các mục theo một thứ tự khác nhau sẽ vượt qua:

assertThat(c, containsInAnyOrder("three", "two", "one")); 
Các vấn đề liên quan