2011-11-30 2 views
11

Tôi muốn sử dụng hamcrest làm khung đường để sử dụng trong các câu lệnh if, không phải trong các thử nghiệm đơn vị có xác nhận, nhưng trong mã sản xuất thô.Bất kỳ cách nào để sử dụng bộ ghép Hamcrest trong mã sản xuất?

Something như

if (isNotEmpty(name)) return //.... 

hoặc

if (isEqual(name, "John")) return //... 

Cũng giống như AssertThat nhưng không ném lỗi, chỉ cần trở về boolean. Có thể không?

Trả lời

4

Có những bool project cung cấp cú pháp sau:

if(the(name, is(equalTo("Alex")))) { 
... 
} 
+0

Wow, đó là thực sự ấn tượng! – Vitamon

+1

Dự án bool IMHO là một chút overkill cho một phương pháp đơn giản "the". Mặc dù nó cung cấp các đối sánh bổ sung, nhưng đây chỉ là các bản sao của các phần tử Hamcrest (như allOf, anyOf, hoặc là, cả hai, v.v.) – Jonas

5

Chỉ là Java, tùy thuộc vào bạn những gì bạn chọn làm với nó. Các Hamcrest homepage nói:

Cung cấp một thư viện các đối tượng khớp (còn gọi là hạn chế hoặc các vị từ) cho phép quy tắc 'trận đấu' được xác định khai báo, được sử dụng trong khuôn khổ khác. Các kịch bản điển hình bao gồm các khuôn khổ thử nghiệm, thư viện mô phỏng và quy tắc xác thực giao diện người dùng.

Lưu ý: Hamcrest nó không phải là thư viện thử nghiệm: nó chỉ xảy ra rằng đối sánh rất hữu ích để thử nghiệm.

Ngoài ra còn có a page on the other frameworks sử dụng Hamcrest.

+0

Đồng ý, tôi chỉ cần một ví dụ làm việc, làm thế nào để sử dụng mà không cần quẹt assertThat – Vitamon

5

Bạn có thể sử dụng phương thức matches(value) của bất kỳ phiên bản Matcher nào.

if (equalTo("John").matches(name)) { ... } 

Để cải thiện khả năng đọc, hãy tạo phương thức trợ giúp của riêng bạn tương tự như assertThat.

public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) { 
    return matcher.matches(actual); 
} 

... 

if (checkThat(name, equalTo("John"))) { ... } 

Nếu bạn đưa ra một tên tốt hơn so với checkThat như ifTrueThat, hãy thêm nó trong nhận xét. :)

5

Theo dõi câu trả lời của David, chúng tôi hiện đang thực hiện chính xác điều này và phương thức trợ giúp của chúng tôi được đặt tên là "the()". Điều này dẫn đến mã như sau:

if(the(name, is(equalTo("John")))) {...} 

sẽ hơi khó hiểu vào cuối, nhưng làm cho nó rất dễ đọc ngay cả đối với khách hàng.