2010-01-26 21 views
14

Các lớp đệm giao thức được đánh dấu final, có lẽ là cho hiệu quả; tuy nhiên, điều này làm cho chúng khá khó kiểm tra với - Mockito không thể giả lập/gián điệp trên các lớp học cuối cùng. Tôi đã thử sử dụng PowerMockito không thành công: Tôi nhận được ClassFormatError khi chuẩn bị lớp học final để kiểm tra.Có thể giả lập một thông báo đệm giao thức Java không?

Giải pháp của tôi cho đến bây giờ là tạo ra các giao diện bộ điều hợp giả, nhưng tôi hy vọng có một cách tiếp cận ít tốn kém hơn.

+3

Tôi không thể thấy lý do tại sao bạn cần tạo một lớp thông báo protobuf. Nếu bạn cần phải sử dụng một trong một thử nghiệm, chỉ cần tạo nó theo cách thông thường. Nếu bạn đang chế nhạo một dịch vụ, bạn chỉ có thể giả lập ServiceClass.Interface. –

+0

@Geoff: Đó là một điểm tốt, sử dụng một số giá trị đơn giản sẽ làm việc trong nhiều trường hợp - Tôi đã hy vọng sử dụng chức năng RETURNS_MOCKS để tránh phải xây dựng các thư phức tạp hơn và xác minh một số phần nhất định của thư được đọc. Tôi sẽ thử các khuôn khổ giả khác được đề cập bên dưới để xem chúng hoạt động như thế nào. – cdleary

Trả lời

2

JMockit có thể xử lý finalstatic. Chỉ cần chú ý đến cách thiết lập nó vì nó yêu cầu tham số JVM -javaagent hoặc các tinh chỉnh classpath hoặc chú thích bổ sung để có thể giả lập các chi tiết finalstatic.

+0

JMockit không thể giả lập chúng bằng java.lang.ExceptionInitializerError. – cdleary

+0

Bạn đã thử tất cả điều khoản định nghĩa lại javaagent chưa? Nếu bạn đang cố gắng giả lập một lớp java lõi/hệ thống, bạn cần ghi đè đường dẫn lớp khởi động JVM. Có thể các bài kiểm tra của bạn thiếu chú thích? Xin lỗi tôi không thể giúp đỡ nhiều hơn. Tôi không quen thuộc với lớp bạn đang cố gắng thử hoặc cách bạn tiếp cận nó. – aberrant80

+0

Trên thực tế, bạn nên thực hiện kiểm tra JMockit một cách dễ dàng: hoặc thêm '-javaagent: /jmockit.jar' làm tham số khởi động JVM hoặc thêm jmockit.jar trước junit-xyz.jar vào đường dẫn lớp nếu sử dụng JDK 1.6 . Nếu vẫn không thành công, hãy đăng sự cố cụ thể của bạn trong nhóm thảo luận Người dùng JMockit. –

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