Làm cách nào để đợi diễn viên Scala thoát()? Tôi đã thiết lập hai diễn viên trong một bài kiểm tra đơn vị và gửi một vài thông điệp để bắt đầu. Họ gửi một vài thông điệp qua lại và cuối cùng cả hai đều gọi exit(). Làm thế nào để kiểm tra đơn vị của tôi chờ cho cả hai diễn viên kết thúc trước khi vượt qua?Đợi diễn viên xuất cảnh()
Trả lời
Nếu bạn biết trước số lượng tin nhắn được trao đổi giữa các diễn viên, bạn có thể sử dụng java.util.concurrent.CountDownLatch
để theo dõi số lượng tin nhắn. Trong các diễn viên, sau mỗi lần xử lý các tin nhắn, làm
latch.countDown()
và trong chủ đề chính của bạn làm
latch.await()
này sẽ làm cho chính chủ đề chờ đợi của bạn cho đến khi đếm chốt là xuống không.
Nếu bạn không biết số lượng thư trước, nhưng có điều kiện cho biết kết thúc, thì bạn có thể sử dụng java.util.concurrent.locks.Condition
. Trong các diễn viên, khi điều kiện của bạn được thỏa mãn, làm
if (conditionSatisfied)
condition.signal()
và trong chủ đề chính của bạn làm
while (!conditionSatisfied)
condition.await()
để làm cho nó chờ đợi cho đến khi điều kiện được thỏa mãn.
Xem javadocs của CountDownLatch
và Condition
để biết chi tiết.
Xem this Gist ví dụ sử dụng Condition
.
Trong thông số kỹ thuật, bạn có thể sử dụng Eventually Matchers. Nếu bạn biết trạng thái cuối cùng của diễn viên hoặc bất kỳ thực thể nào (nói, lưu giữ lâu dài) nó sửa đổi, bạn có thể buộc thử nghiệm phải đợi, cho đến khi chuyển sang trạng thái này sẽ xảy ra:
<entity state> must eventually(10, 1.second)(be(<state>)) // there will be 10 retires every second, and if the state will be different, exception is thrown
Điều đó sẽ làm cho các bài kiểm tra đơn vị mất khoảng một phần mười của một giây để chạy đó là cách quá chậm. –
- 1. Scene2d - Đã xoay diễn viên không dịch như mong đợi
- 2. Akka diễn viên "yêu cầu" và "chờ đợi" với TimeoutException
- 3. Diễn viên đang ngủ?
- 4. pykka - Diễn viên chậm?
- 5. Soạn diễn viên
- 6. ElasticSearch biểu diễn mong đợi
- 7. Scala diễn viên từ xa
- 8. Scala diễn viên Remote Security
- 9. Các diễn viên ở Clojure
- 10. Ưu tiên diễn viên Akka
- 11. Mẫu thiết kế với diễn viên
- 12. diễn viên kiểu c vs reinterpret_cast
- 13. Bắt đầu diễn viên Akka trong Play
- 14. diễn viên libcppa sinh ra các diễn viên trên các kết nối ổ cắm
- 15. Vòng đời của một diễn viên trong mô hình diễn viên
- 16. Triển khai diễn viên Scala diễn viên khác nhau Tổng quan
- 17. Sự khác biệt của diễn viên Akka với mô hình diễn viên của Scala
- 18. Câu hỏi liên quan đến "C4312 cảnh báo: 'loại dàn diễn viên"
- 19. Có thể AKKA remoted diễn viên được sử dụng trong bối cảnh bầy đàn p2p không?
- 20. Làm thế nào để ngăn chặn các thông điệp cảnh báo từ dàn diễn viên()
- 21. làm thế nào để làm diễn viên (erlang) trong java?
- 22. Akka Đăng nhập bên ngoài diễn viên
- 23. Haskell - Biến thể dựa trên diễn viên
- 24. Scala: Tại sao diễn viên lại nhẹ?
- 25. Akka Socket cho mỗi diễn viên
- 26. Tác vụ của diễn viên trong libgdx
- 27. Execute diễn viên tiềm ẩn khi chạy
- 28. Tại sao diễn viên chung này không thành công?
- 29. preStart móc: một thông điệp tới các diễn viên tự
- 30. sử dụng zeromq để triển khai mô hình diễn viên
Tôi có thể countDown() ngay trước exit() và chỉ đếm đến 1. Điều đó có vẻ dư thừa vì hai phương thức sẽ luôn được gọi cùng nhau. –
Tôi không hiểu. Bạn muốn các chủ đề chính để chờ đợi cho đến khi các diễn viên được hoàn thành, phải không? Đó là những gì các cuộc gọi 'await()' sẽ thực hiện. –
Nó có nghĩa là tôi phải thêm một chốt hoặc điều kiện vào mã sản xuất (các diễn viên) hoàn toàn cho một thử nghiệm JUnit (chờ đợi trên các diễn viên). –