Trong thử nghiệm jUnit, tôi muốn lấy một số hàng từ cơ sở dữ liệu dựa trên cột name
. Sau đó tôi muốn kiểm tra các hàng mà tôi nhận được có tên tôi mong đợi. Tôi có những điều sau đây:jUnit và ổi, so sánh danh sách bình đẳng sau khi biến đổi()
Set<MyClass> typesToGet = MyClassFactory.createInstances("furniture",
"audio equipment");
Collection<String> namesToGet = Collections2.transform(typesToGet,
new NameFunction<MyClass, String>());
List<MyClass> typesGotten = _svc.getAllByName(typesToGet);
assertThat(typesGotten.size(), is(typesToGet.size()));
Collection<String> namesGotten = Collections2.transform(typesGotten,
new NameFunction<ItemType, String>());
assertEquals(namesToGet, namesGotten); // fails here
Tôi hiện được thất bại này:
java.lang.AssertionError: expected: com.google.common.collect.Collections2$TransformedCollection<[audio equipment, furniture]> but was: com.google.common.collect.Collections2$TransformedCollection<[audio equipment, furniture]>
Vì vậy, cách ngắn gọn nhất sạch nhất để thử nghiệm mà tôi có hàng trở lại từ cơ sở dữ liệu mà name
cột là những gì phù hợp với tên tôi nói tôi muốn? Tôi có thể có một vòng lặp for
lặp đi lặp lại và kiểm tra xem mỗi tên trong một danh sách có tồn tại trong danh sách khác không, nhưng tôi đã hy vọng ngắn gọn hơn. Một cái gì đó giống như mã giả sau đây sẽ được tốt đẹp:
List<MyClass> typesGotten = ...;
["furniture", "audio equipment"].equals(typesGotten.map(type => type.getName()))
Tôi nghĩ rằng tôi đã tìm thấy 'containsInAnyOrder' được mô tả trên http://www.jarvana.com/jarvana/view/org/hamcrest/hamcrest-library/1.2.1/hamcrest-library-1.2.1-javadoc .jar! /org/hamcrest/Matchers.html nhưng tôi không thấy tài liệu về nó. Bạn có biết nếu nó xác nhận hai bộ sưu tập có cùng kích cỡ, bộ sưu tập 1 không có gì ngoài các mục được tìm thấy trong bộ sưu tập 2 và bộ sưu tập 2 không có gì ngoài các mục được tìm thấy trong bộ sưu tập 1? –
Tài liệu của Hamcrest thiếu một chút trong lĩnh vực này, vì vậy bạn nên thử một vài người chơi để thuyết phục bản thân rằng họ đang làm đúng. Ngoài ra, mã nguồn có tại http://code.google.com/p/hamcrest/source/browse/trunk/hamcrest-java/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInAnyOrder.java ? r = 480. Có, nó kiểm tra rằng bộ sưu tập 1 có tất cả các thành phần của bộ sưu tập 2, và ngược lại, và do đó chúng có cùng kích thước. – Kkkev