Có jUnit song song với NUnit CollectionAssert
không?
Có jUnit song song với NUnit CollectionAssert
không?
Câu 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 lắng, nó được vận chuyển cùng với JUnit, không cần bổ sung .jar
) để tạo ra các xác nhận tự mô tả phức tạp bao gồm các xác nhận hoạt động trên 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 cách tiếp cận này, bạn sẽ tự động nhận được mô tả tốt về xác nhận khi nó không thành công.
Không trực tiếp, không. Tôi đề xuất sử dụng Hamcrest , cung cấp một bộ quy tắc đối sánh phong phú, tích hợp độc đáo với jUnit (và các khuôn khổ thử nghiệm khác)
Hãy xem FEST Fluent Assertions. IMHO chúng thuận tiện hơn để sử dụng so với Hamcrest (và mạnh mẽ như nhau, có thể mở rộng, v.v.) 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
Giải pháp của Joachim Sauer rất hay nhưng không hiệu quả nếu bạn đã có một loạt các kỳ vọng mà bạn muốn xác minh nằm trong kết quả của bạn. Điều này có thể xuất hiện khi bạn đã có một kỳ vọng đã tạo hoặc không đổi trong các bài kiểm tra của mình mà bạn muốn so sánh với một kết quả hoặc có lẽ bạn có nhiều kỳ vọng mà bạn mong đợi được hợp nhất trong kết quả. Vì vậy, thay vì sử dụng các trình so khớp, bạn có thể chỉ cần 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
}
hasItems(expected1.toArray(new String[expected1.size()]))
. Nó sẽ cung cấp cho bạn những thông báo thất bại tốt hơn.