cuốn sách gpt4 ai đã làm

Kiểm tra Hamcrest về sự hiện diện của chỉ một mục trong danh sách với các thuộc tính cụ thể

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 03:19:35 25 4
mua khóa gpt4 Nike

Với Hamcrest chúng ta có thể dễ dàng kiểm tra sự hiện diện trong danh sáchít nhất mộtCác mục có thuộc tính cụ thể, chẳng hạn như

Danh sách myList = ....

MatcherAssert.assertThat(myList, Matchers.hasItem(Matchers.hasProperty("fieldName", Matchers.equalTo("Một chuỗi vui nhộn")))));

Pojo 是这样的:

lớp công khai Pojo{
tên trường chuỗi riêng tư;
}

Điều này không sao, nhưng làm cách nào để kiểm tra xem có chính xác một đối tượng trong danh sách có thuộc tính cụ thể không?

câu trả lời hay nhất

Bạn có thể phải viết công cụ so khớp của riêng mình cho việc này. (Tôi thích các xác nhận liên hoan và Mockito hơn, nhưng đã từng sử dụng Hamcrest ...)

Ví dụ……

nhập org.hamcrest.Description;
nhập org.hamcrest.Matcher;
nhập org.hamcrest.core.IsCollectionContaining;

lớp cuối cùng công khai CustomMatchers {

public static Matcher> chính xácNItems(final int n, Matcher elementMatcher) {
trả về IsCollectionContaining(elementMatcher) mới {
@Ghi đè
được bảo vệ booleanmatchSafely(Iterable bộ sưu tập, Mô tả không khớpDescription) {
số int = 0;
boolean isPastFirst = sai;

for (Mục đối tượng: bộ sưu tập) {

if (elementMatcher.matches(item)) {
count++;
}
nếu (isPastFirst) {
không khớpDescription.appendText(", ");
}
elementMatcher.describeMismatch(item, mismatchDescription);
isPastFirst = đúng;
}

nếu (đếm != n) {
mismatchDescription.appendText(". Dự kiến ​​chính xác là " + n + " nhưng lại nhận được " + count);
}
số lần trả về == n;
}
};
}
}

Những gì bạn có thể làm bây giờ...

    List list = Arrays.asList(new TestClass("Xin chào"), TestClass mới("World"), TestClass mới("Xin chào"));

khẳng địnhThat(list, CustomMatchers.exactlyNItems(2, hasProperty("s",equalTo("Xin chào"))));

Ví dụ lỗi đầu ra khi danh sách là...

    List list = Arrays.asList(new TestClass("Xin chào"), TestClass mới("World"));

...Sẽ...

Ngoại lệ trong chuỗi "chính" java.lang.AssertionError: 
Dự kiến: một bộ sưu tập chứa hasProperty("s", "Hello")
nhưng: , thuộc tính 's' là "Thế giới".

(Bạn có thể muốn tùy chỉnh nó một chút)

Nhân tiện, "TestClass" là...

lớp tĩnh công khai TestClass {
Chuỗi s;

TestClass công khai (Chuỗi s) {
cái này.s = s;
}

Chuỗi công khai getS() {
trả lại s;
}
}

Về thử nghiệm java - Hamcrest trong đó chỉ tồn tại một mục trong danh sách có thuộc tính cụ thể, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/29609476/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress