2010-10-19 46 views
14

Có một tin nhắn (văn bản), định dạng và nội dung tôi chắc chắn biết.
Hiện tại, lớp trong Java, phân tích cú pháp và đọc thông báo này từ tệp, được triển khai.Giả lập hoặc mô phỏng Hàng đợi Tin nhắn (JMS)

Trong thế giới thực, thông báo này sẽ đến từ Hàng đợi tin nhắn.

Hiện tại tôi nên mô phỏng, giả lập hoặc tạo Hàng đợi tin nhắn trên máy tính cục bộ của mình cho mục đích thử nghiệm.

Java spec (java jms):

JMS provider: A messaging system that implements the JMS specification. 
JMS clients: Java applications that send and receive messages. 
Messages: Objects that are used to communicate information between JMS clients. 

Về đặc điểm kỹ thuật này, tôi cần cung cấp JMS.

Ứng dụng khách JMS -Đó là lớp của tôi đọc tin nhắn.
Tin nhắn chính tôi biết.

Vì vậy, câu hỏi là làm thế nào để bắt đầu hàng đợi tin nhắn?
Làm thế nào tôi có thể mô phỏng nó programmaticaly từ mã Java? Tôi có thể thử nó bằng cách nào đó?

Cảm ơn.

+1

Tại sao lại gặp tất cả sự cố đó? Tại sao không chỉ cài đặt một nhà cung cấp JMS cục bộ trên máy trạm của bạn và sử dụng nó? Bạn có thể tải xuống các phiên bản nguồn mở và các phiên bản dùng thử của các nhà cung cấp JMS của nhà cung cấp. Vì nó là JMS, mọi triển khai tuân thủ sẽ hoạt động để thử nghiệm đơn vị. –

+0

Đó là tôi hỏi, vì vậy tôi cần cài đặt nhà cung cấp JMS. Bạn có thể tư vấn cho tôi điều gì? cảm ơn bạn – sergionni

+0

Vâng, tôi là một IBMer vì vậy tôi phải đề nghị dùng thử WMQ. :-) Nhưng tôi thấy bạn đã tìm thấy ActiveMQ mà bạn có thể sử dụng để phát triển mà không có nó hết hạn. Mặt khác, bất cứ điều gì bạn sử dụng trong sản xuất sẽ là cách tốt nhất để phát triển để chuyển sang điều đó một khi bạn biết nó sẽ là gì. –

Trả lời

5

Nếu bạn sử dụng Spring Integration, bạn có thể thực hiện việc này khá dễ dàng. Nó có triển khai "Kênh" cơ bản, trừu tượng. Bạn có thể tạo và kiểm tra các nhà sản xuất và người tiêu dùng của mình và khi bạn sẵn sàng di chuyển thêm một bước nữa, bạn chỉ cần chỉ định bộ điều hợp JMS trên đầu kênh của mình.

1

Thông thường, thực tiễn không tốt là giả lập hoặc mô phỏng hệ thống bên ngoài, chẳng hạn như JMS. Một ý tưởng tốt hơn là trừu tượng logic của bạn thành một bean độc lập, thực hiện một lớp ủy nhiệm sẽ kết nối JMS với bean của bạn. Với thiết kế như vậy, bạn có thể kiểm tra đậu của bạn trong sự cô lập từ JMS và sau đó có kiểm tra hệ thống sẽ kiểm tra toàn bộ tích hợp với hệ thống JMS thực.

Đối với JMS trong quá trình, bạn có thể xem SomnifugiJMS.

+28

Tôi hoàn toàn không đồng ý. Mocking một hệ thống bên ngoài là rất quan trọng cho các bài kiểm tra đơn vị, đặc biệt là nếu bạn dựa vào một giao diện bên ngoài và không muốn biến các bài kiểm tra đơn vị của bạn thành các bài kiểm tra tích hợp. –

+0

@ank - Nó * là một hành động không tốt để chế nhạo một hệ thống bên ngoài. Giải pháp là tạo ra một giao diện cho hệ thống đó trong ứng dụng của riêng bạn (bean mà Eugene Kuleshov đề cập) xử lý giao tiếp với hệ thống bên ngoài, và sau đó trong thử nghiệm, bạn giả lập * rằng *. Cố gắng để giả lập toàn bộ hệ thống bên ngoài là tốn kém và lộn xộn. – Ickster

+2

@ Ickster đó là định nghĩa của một mô hình ... (Tôi biết điều này là khá cũ, nhưng) bạn có thể cung cấp một ví dụ cho sự khác biệt mà bạn tin rằng bạn đang làm? – davemyron

-1

Nói chung tôi đồng ý với Eugene Kuleshov. Nhưng nếu bạn vẫn cần mocking như vậy tôi muốn đề nghị bạn sử dụng BlckingQueue từ gói java.util.concurent. Tôi nghĩ rằng nó không phải là một vấn đề lớn để bọc nó với giao diện javax.jms.Queue. BTW nó là một ý tưởng tốt cho một số loại dự án mã nguồn mở.

+0

Tôi vừa tìm thấy Apache ActiveMQ. Hãy thử điều này trước tiên. – sergionni

1

Để kiểm tra một ứng dụng trong sự cô lập khi sản xuất thực tế cung cấp JMS là không có sẵn, bạn có thể sử dụng một trong số:

  1. JMS giả: Khi thử nghiệm các ứng dụng của bạn, bạn có thể mô phỏng các phụ thuộc không tồn tại sử dụng test doubles. Bạn có thể sử dụng một mô hình JMS sẽ mô phỏng hành vi của một nhà cung cấp JMS thực sự. API simulation tools sẽ cho phép bạn tạo các JMS mocks (chỉ cần chọn một công cụ hỗ trợ JMS, ví dụ Traffic Parrot). Sử dụng mô hình JMS sẽ cho phép bạn có mức độ linh hoạt cao trong quá trình thử nghiệm. Bạn sẽ có thể thử nghiệm các kịch bản thử nghiệm giống như sản xuất điển hình nhưng cũng có các tình huống giả định bằng cách thiết lập mô hình của bạn để trả về hầu như bất kỳ loại thông báo nào. Bạn cũng sẽ có thể mô phỏng các loại lỗi khác nhau, thường khó thực hiện với các nhà cung cấp JMS thực. Hãy xem this introduction video to JMS service virtualization for ActiveMq (ảo hóa dịch vụ là một tên khác cho mô hình) hoặc this one for IBM MQ. Lưu ý, những video này là từ Traffic Parrot, nhưng nguyên tắc được mô tả sẽ áp dụng cho bất kỳ công cụ nào bạn chọn.

  2. Ví dụ kiểm tra nhà cung cấp JMS: Bạn có thể chạy nhà cung cấp JMS trên máy tính xách tay hoặc trong một môi trường thử nghiệm và kết nối ứng dụng của bạn với nó thay vì nhà cung cấp sản xuất. Khi bạn sử dụng các nhà cung cấp nguồn mở trong sản xuất như ActiveMQ hoặc RabbitMQ, bạn cũng nên dễ dàng chạy một trong số chúng trên máy tính xách tay của bạn vì chúng rất nhẹ và miễn phí. Đối với IBM Websphere MQ, bạn có thể sử dụng miễn phí IBM MQ for Developers.

  3. Mô phỏng lớp JMS: Bạn có thể sử dụng Mockito trong các bài kiểm tra đơn vị để mô phỏng tương tác với các lớp JMS. Giải pháp này đi kèm với tất cả các thương mại-off của thử nghiệm đơn vị. Để biết thêm thông tin về những người xem testing pyramid. Nếu bạn muốn hộp đen kiểm tra ứng dụng của bạn, hãy sử dụng một trong các giải pháp mà tôi đã mô tả ở trên.

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