2013-08-21 49 views
18

hamcrest hoạt động tốt cho các kiểu dữ liệu nguyên thủy do đấm bốc tự động và unboxing như trong trường hợp này:Sử dụng quẹt hamcrest với mảng kiểu nguyên thủy

assertThat(1, is(1)); 

Tuy nhiên, tôi muốn sử dụng hasItemInArray khớp hamcrest với một mảng kiểu nguyên thủy như thế này:

int[] values = someMethodCall(); 
assertThat(values, hasItemInArray(1)); 

Vì không có quyền tự động/unboxing cho mảng các loại dữ liệu nguyên thủy mà mã trên không biên dịch. Có cách nào ưu tiên để hoàn thành các điều trên, ngoài việc chuyển đổi thủ công từ int[] sang Integer[]?

Trả lời

11

AFAIK không có cách tự động để đạt được điều này. Nếu bạn có thể sử dụng thư viện của bên thứ 3 bạn có thể muốn kiểm tra thư viện Apache Commons Lang cung cấp một lớp ArrayUtils với một phương pháp chuyển đổi:

Integer[] toObject(int[] array)

int[] values = someMethodCall(); 
Integer[] objValues = ArrayUtils.toObject(values); 
assertThat(objValues , hasItemInArray(1)); 
+0

Tôi đã đoán như vậy, nhưng cảm ơn bạn đã xác nhận và chỉ cho tôi đến Apache Commons! – k13n

0

Tuy nhiên, một thay thế cho văn bản khớp riêng của bạn sẽ được để sử dụng một trong thư viện đối sánh như conmatch.

int[] values = someMethodCall(); 
assertThat(values, intArrayContaining(1)); 

Tôi đoán đã có sẵn các Đối sánh khác trên github.

Các vấn đề liên quan