스칼라 액터가 종료 될 때까지 기다리는 방법()? 단위 테스트에서 두 명의 액터를 설정하고 몇 명의 메시지를 보내서 시작합니다. 그들은 몇 가지 메시지를 앞뒤로 보내고 결국 양쪽 모두 exit()를 호출합니다. 합격하기 전에 두 주체가 끝나기를 기다리는 부대 테스트를 어떻게 만들 수 있습니까?액터가 끝날 때까지 기다리십시오()
13
A
답변
7
액터간에 교환 된 메시지의 수를 미리 알고있는 경우 java.util.concurrent.CountDownLatch
을 사용하여 메시지 수를 추적 할 수 있습니다. 배우에서, 메시지의 각 처리 후,
latch.countDown()
하고 주 스레드에서
래치의 카운트 다운 제로로 될 때까지 메인 스레드 대기를 만들 것입니다latch.await()
이
을합니까.미리 메시지 수를 모르지만 완료를 나타내는 조건이있는 경우 java.util.concurrent.locks.Condition
을 사용할 수 있습니다. 당신의 조건이 만족 될 때 배우에서,
if (conditionSatisfied)
condition.signal()
하고 주 스레드에서
이 조건이 만족 될 때까지 그것을 기다릴 수 있도록while (!conditionSatisfied)
condition.await()
을합니까.
자세한 내용은 javadocs CountDownLatch
및 Condition
을 참조하십시오.
예를 들어 Condition
을 사용하는 this Gist을 참조하십시오.
2
사양에서는 Eventually Matchers을 사용할 수 있습니다. 당신은 당신의 배우의 최종 상태 또는 실체를 알고있는 경우 (예를 들어, 지속성 저장소)이 상태로의 전환이 발생할 때까지 기다려야하는 테스트를 강제 할 수 있습니다, 수정 :
<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
+1
이렇게하면 단위 테스트를 실행하는 데 약 10 분의 1 초가 걸립니다. 너무 느립니다. –
관련 문제
- 1. 키보드가 숨길 때까지 기다리십시오.
- 2. 로드 할 때까지 기다리십시오.
- 3. 이벤트가 끝날 때까지 기다림
- 4. 애니메이션이 끝날 때까지 기다렸다가
- 5. jQuery는 수업이 끝날 때까지
- 6. TTimer가 끝날 때까지 어떻게 기다려야합니까?
- 7. 배경이 끝날 때까지 배경을 그려야합니다.
- 8. 배열 함수가 끝날 때까지 대기 :
- 9. sendBroadcast가 끝날 때까지 기다리는 방법
- 10. 애니메이터가 끝날 때까지 기다리는 방법?
- 11. 내 습관이 끝날 때까지 잠깐 (
- 12. 파일 편집이 끝날 때까지 기다려주십시오.
- 13. pthread_cancel이 끝날 때까지 기다리는 중
- 14. 유닉스 도메인 소켓이 바인딩 될 때까지 기다리십시오.
- 15. in Twisted, 연결이 깨끗하게 닫힐 때까지 기다리십시오.
- 16. 모든 WPF 애니메이션이 중지 될 때까지 기다리십시오.
- 17. 설정 프로젝트가 .NET에서 닫힐 때까지 기다리십시오.
- 18. iframe을 열고 Selenium을로드 할 때까지 기다리십시오.
- 19. 효과가 끝날 때까지 jQuery를 기다리는 방법은 무엇입니까?
- 20. 트위터 전에 CLLocationManager가 끝날 때까지 기다려야합니다
- 21. Android : tts가 끝날 때까지 기다린 후 계속하십시오.
- 22. JSFL 파일이 끝날 때까지 프로그램을 멈추는 중
- 23. 브라우저로드가 끝날 때까지 브라우저가 대기하는 이유는 무엇입니까?
- 24. 비동기 메서드가 끝날 때까지 기다리는 방법?
- 25. 개체가 끝날 때까지 보관 : 아니요 Dealloc은 괜찮습니까?
- 26. PHP를 사용하여 루프가 끝날 때까지 종료
- 27. adplus.vbs로 덤프 캡처 - 디버거가 끝날 때까지 기다리시겠습니까?
- 28. 시스템 명령이 끝날 때까지 기다리는 방법
- 29. Java - 루프가 끝날 때까지 그림이 표시되지 않습니까?
- 30. 마지막으로 끝날 때까지 비동기 대기 파일을 다우로드하십시오.
을 그냥 전에 카운트 다운을() 수 exit()는 1로만 계산됩니다. 두 메소드가 항상 함께 호출되므로 중복되는 것처럼 보입니다. –
나는 그것을 얻지 않는다. 액터가 끝날 때까지 주 스레드가 기다리고 싶습니다. 이것이'await()'호출이하는 일입니다. –
이것은 JUnit 테스트 (액터에서 대기 중)만을 위해 프로덕션 코드 (행위자)에 래치 또는 조건을 추가해야한다는 것을 의미합니다. –