2012-01-10 44 views
5

Tôi có một chương trình vận hành các mục công việc kéo ra khỏi hàng đợi chặn và hoạt động đồng thời trên chúng. Tôi nhận ra đây là một mô tả RẤT lỏng lẻo, nhưng bất cứ ai có thể đề xuất một chiến lược thử nghiệm đơn vị/ý tưởng về những gì để kiểm tra?Java - chiến lược kiểm tra đơn vị kiểm tra đồng thời/chặn hàng đợi

+1

Bạn đang cố gắng kiểm tra tính hợp lệ của BlockingQueue hoặc xử lý đồng thời trên giá trị trả về? –

+0

Tôi đã thử nghiệm tính hợp lệ của công việc thực tế mà trình xử lý xếp hàng chặn hoạt động, nhưng tôi muốn kiểm tra mã xung quanh hoạt động của nó. –

+0

Thử nghiệm cho sự tương tranh là khó khăn: bạn có thể có một chương trình đa luồng kém sẽ vượt qua tất cả các thử nghiệm hoàn hảo trên một số nền tảng (ví dụ: một CPU lõi), nhưng không thành công trên các nền tảng khác. Ngay cả khi các thử nghiệm của bạn thành công trên một CPU đa lõi, việc lập lịch trình chuỗi thay đổi cho các hệ điều hành khác nhau và chúng có thể thất bại ở nơi khác. – toto2

Trả lời

2

Sử dụng các cơ chế xếp hàng công nhân trong java.util.concurrent và dựa vào chúng để kiểm tra mã của chúng. Sau đó, chỉ cần kiểm tra nhân viên của bạn để chắc chắn rằng nó làm điều đúng. Nếu nó độc lập với các chủ đề khác nên là đủ. Nếu không, bạn có thể sẽ cần phải đưa ra một chiến lược thử nghiệm tích hợp trên các cấu hình phần cứng/os/jvm phù hợp với môi trường sản xuất của bạn.

2

Bạn cần thiết kế thiết bị để thử nghiệm.

gợi ý Vì vậy, cụ thể:

  • Hãy chắc chắn rằng bạn có thể đặt các lớp học thử nghiệm hoặc chế nhạo vào hàng đợi
  • Mã số mocks sớm để mất nhiều thời gian và chắc chắn rằng chúng không phải là những người đầu tiên hoàn thành (chứng minh sự tương tranh)
  • Đảm bảo thu thập kết quả của bạn có kích thước bằng nhau đối với tất cả các thử nghiệm của bạn.
  • Đảm bảo kết quả của bạn không hoàn thành cho đến khi được phân bổ cho bài kiểm tra dài nhất.

hmm, tất cả đều bắt nguồn từ việc có thể chèn các nhóm mocks/thử nghiệm vào hàng đợi.

+0

Cảm ơn, đây là những ý tưởng hay. –

2

Loại phụ thuộc vào loại xử lý các lớp học của bạn làm, với các mục được kéo ra. Ví dụ, giả sử họ viết các mục vào cơ sở dữ liệu. Bạn có thể muốn thử nghiệm như thế này.

  • Một chủ đề có thể kéo một mục từ hàng đợi và lưu nó vào cơ sở dữ liệu.
  • Hai chủ đề có thể kéo các mục từ hàng đợi đồng thời và dữ liệu được lưu nếu chuỗi đầu tiên cố lưu trước tiên.
  • Hai chủ đề có thể kéo các mục từ hàng đợi đồng thời và dữ liệu được lưu nếu chuỗi thứ hai cố lưu trước tiên.
  • Năm mươi chủ đề (hoặc bất kỳ giới hạn nào phù hợp cho chương trình của bạn) có thể kéo các mục từ hàng đợi đồng thời và lưu dữ liệu chính xác.

Nếu bạn đang sử dụng một trong các triển khai hàng đợi chặn JDK hoặc triển khai từ bên thứ ba, hãy đảm bảo rằng bạn không thử kiểm tra hành vi của lớp xếp hàng chặn. Tất nhiên, nếu bạn đã viết của riêng bạn, sau đó bạn đã có rất nhiều bài kiểm tra nhiều hơn nữa mà bạn cần phải viết.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn bạn, đây là những điều tuyệt vời. –