2010-10-12 36 views
6

Trong mỗi phiên bản của JUnit Tôi đã thử (lên đến 4.8.1), một assertThat thất bại sẽ hiển thị một thông báo lỗi giống như:Có một phiên bản của JUnit assertThat sử dụng chức năng mô tả 'HamMrest' descriptionMismatch 'không?

mong đợi: [describeTo]
có: [Chuỗi đại diện của đối tượng]

Nói cách khác, nó sẽ hiển thị toString() của đối tượng thay vì mô tả không khớp từ Matcher. Nếu tôi sử dụng assertThat từ org.hamcrest.MatcherAssert.assertThat, sau đó nó sẽ gọi 'descriptionMismatch' và hiển thị thông báo lỗi hữu ích hơn.

Tôi có sử dụng Junit không chính xác hoặc hiện tại không có phiên bản JUnit nào sẽ thực hiện những gì tôi muốn? Hầu hết mọi người đều sử dụng Hamcrest khẳng định không?

Trả lời

3

Câu trả lời ngắn gọn: không. Theo như tôi có thể nói, phiên bản mới nhất của Hamcrest (1.2) đã giới thiệu các chữ ký kiểu không tương thích với phiên bản 1.1, mà JUnit hiện phụ thuộc vào. Tôi không chắc chắn mức độ thiệt hại (do đó để nói) được tạo ra bởi sự thay đổi trong Hamcrest, nhưng nó không xuất hiện mà đội JUnit đang ở trong bất kỳ vội vàng để nâng cấp (xem open issue).

Tôi không hoàn toàn chắc chắn rằng mình đã giải quyết được vấn đề của mình, nhưng tôi định sử dụng MatcherAssert.assertThat(). Điều này có thể yêu cầu một bản phát hành cụ thể của JUnit (junit-dep-xxx tôi tin) sẽ không có xung đột classpath với Hamcrest. Nếu không, bạn có thể nhận được NoSuchMethodErrors khi assertThat() thực hiện cuộc gọi đến describeMismatch().

+0

Cảm ơn. Bạn có sử dụng Hamcrest assertThat, sau đó, hoặc những gì? – Jacob

+0

Xin chào Jacob, hy vọng bản chỉnh sửa của tôi sẽ trả lời câu hỏi đó :) – Grundlefleck

0

Sử dụng other versionassertThat(String, T, Matcher<T>) và trong đối số đầu tiên viết thông điệp của riêng bạn sẽ cung cấp cho bạn mô tả tốt hơn về lỗi.

+2

Cảm ơn, Boris. Đó là một cách hay để tạo mô tả. Tuy nhiên, tôi muốn sử dụng thông báo lỗi tích hợp mà Trình phù hợp có thể tạo thông qua phương thức "describeMismatch" của nó. – Jacob

+0

Bạn được chào đón, Jacob. –

0

Vâng, đây là cố định bởi this commit trong JUnit 4.11:

Như đã chỉ ra bởi Steve Freeman của hamcrest, giao diện Matcher tại có một phương pháp describeMismatch bổ sung. Để an toàn để nắm bắt những cải tiến như vậy trong tương lai, MatcherAssert được sử dụng thay vì sao chép việc triển khai của nó.

Cùng với upgrade to Hamcrest 1.3 (cũng trong 4.11), hai phiên bản này hoạt động tốt cùng nhau.

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