Có jUnit song song với NU2 của 01nkhông?CollectionAssert in jUnit?
Trả lời
Sử dụng JUnit 4.4 bạn có thể sử dụng assertThat()
cùng với mã Hamcrest (đừng lo, nó được gửi đi) với JUnit, không cần cho thêm một .jar
) để sản xuất phức tạp tự mô tả khẳng định bao gồm cả những hoạt động trên các bộ sưu tập:
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.*;
import static org.hamcrest.CoreMatchers.*;
List<String> l = Arrays.asList("foo", "bar");
assertThat(l, hasItems("foo", "bar"));
assertThat(l, not(hasItem((String) null)));
assertThat(l, not(hasItems("bar", "quux")));
// check if two objects are equal with assertThat()
// the following three lines of code check the same thing.
// the first one is the "traditional" approach,
// the second one is the succinct version and the third one the verbose one
assertEquals(l, Arrays.asList("foo", "bar")));
assertThat(l, is(Arrays.asList("foo", "bar")));
assertThat(l, is(equalTo(Arrays.asList("foo", "bar"))));
Sử dụng phương pháp này, bạn sẽ Automagically có được một mô tả tốt của assert khi nó không thành công.
Không trực tiếp, không. Tôi đề nghị sử dụng Hamcrest, cung cấp bộ quy tắc phù hợp phong phú tích hợp độc đáo với jUnit (và các khung kiểm tra khác)
này không biên dịch đối với một số lý do (xem http://stackoverflow.com/questions/1092981/hamcrests-hasitems): ArrayList
Hãy xem xét Xác nhận lưu loát của FEST. IMHO chúng thuận tiện hơn để sử dụng hơn Hamcrest (và mạnh mẽ, mở rộng, vv) và có hỗ trợ IDE tốt hơn nhờ giao diện thông thạo. Xem https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions
Trong năm 2017 có vẻ như nhiều người đang sử dụng một chi nhánh của FEST gọi là AssertJ. – Max
Giải pháp của Joachim Sauer rất hay nhưng không hoạt động nếu bạn đã có một loạt kỳ vọng mà bạn muốn xác minh là kết quả của bạn. Điều này có thể xuất hiện khi bạn đã có kỳ vọng được tạo ra hoặc không đổi trong các thử nghiệm mà bạn muốn so sánh kết quả, hoặc có lẽ bạn có nhiều kỳ vọng bạn mong muốn được hợp nhất trong kết quả. Vì vậy, thay vì sử dụng quẹt bạn có thể chỉ có thể sử dụng List::containsAll
và assertTrue
Ví dụ:
@Test
public void testMerge() {
final List<String> expected1 = ImmutableList.of("a", "b", "c");
final List<String> expected2 = ImmutableList.of("x", "y", "z");
final List<String> result = someMethodToTest();
assertThat(result, hasItems(expected1)); // COMPILE ERROR; DOES NOT WORK
assertThat(result, hasItems(expected2)); // COMPILE ERROR; DOES NOT WORK
assertTrue(result.containsAll(expected1)); // works~ but has less fancy
assertTrue(result.containsAll(expected2)); // works~ but has less fancy
}
Ooh, tôi đã không nhận ra hamcrest đã làm cho nó vào distro junit. Go Nat! – skaffman
Nếu tôi muốn khẳng định l bao gồm các mục ("foo", "bar"), nhưng không có mục nào khác tồn tại - có một số cú pháp dễ dàng cho điều đó không? – ripper234
Sử dụng đoạn mã trên và ném thêm assertTrue (l.size() == 2) – aberrant80