현재 블록을 실행해야하거나 (특정 시간 초과에 도달하면) 예외를 throw하는 테스트 함수를 작성하고 있습니다. 이에 그 문제를 해결하기 위해 의도 된 방법 인 경우제한 시간이있는 Kotlin Coroutines
fun <T> runBlockWithTimeout(maxTimeout: Long, block:() -> T): T {
val future = CompletableFuture<T>()
// runs the coroutine
launch { block() }
return future.get(maxTimeout, TimeUnit.MILLISECONDS)
}
이 작동하지만, 잘 모르겠어요 :
나는 코 틀린에 Coroutines
에 이것을 시도하지만 Coroutines
및 CompletableFuture
의 혼합물과 함께 끝났다 코 틀린.
runBlocking {
withTimeout(maxTimeout) {
block()
}
}
그러나 이것은 예를 들어, block
호출하는 즉시 작동하지 않을 것 같다 :
Thread.sleep(...)
그래서 CompletableFuture
접근 방법이 더 좋은가요?
갱신 내가 달성하고자하는 어떤 일 :
이비동기 통합 테스트 코드 (RabbitMq에서 데이터를 수신 등)과 같이 어떻게 든 테스트해야 :
var rabbitResults: List = ... // are filled async via RabbitListeners
...
waitMax(1000).toSucceed {
assertThat(rabbitResults).hasSize(1)
}
waitMax(1000).toSucceed {
assertThat(nextQueue).hasSize(3)
}
...
일부 테스트 라이브러리를 사용하는 경우 이미 시간 초과 기능이있을 수 있습니다. 예를 들어 JUnit을 사용하면 테스트 메소드에 @Test (timeout = 5000) 주석을 설정할 수 있습니다. –
내가 원하는 것을 더 잘 이해할 수 있도록 설명을 업데이트했습니다. – guenhter